我正在寻找一种接收3d表面网格的算法(即由三维三角形组成,这些三角形是某些流形的离散化)并在网格体积内生成四面体.
也就是说,我希望3d相当于这个2d问题:给定一个闭合曲线,对它的内部进行三角测量.
如果不清楚,我很抱歉,这是我能想到解释它的最佳方式.
对于第二种情况,有三角形.对于3d情况,我找不到.
我在3D空间中有一组点(其中100万,可能更多,如10或1亿)形成一个球体(它们填充球体 - 它们不仅仅在表面上)我希望建立将每个球体连接到其第一个邻居的四面体...寻找四面体化,到目前为止,我发现的只有:
我怎样才能做到这一点?
2014-08-09首先,感谢大家的建议!我是 - 现在仍然是 - 在假期,只是路过来检查是否有人回答......我并没有失望!!!! :-)我想我会首先尝试CGAL,并会从那里看到.我在O(n2)的同一组点上进行了其他数据计算,我预计它将持续大约1周,所以几个小时就不会那么糟糕.分钟将是梦想成真!
我想通过绘制一个四面体网格matplotlib,以下是一个简单的四面体网格:
xyz = np.array([
[-1,-1,-1],
[ 1,-1,-1],
[ 1, 1,-1],
[-1, 1,-1],
[-1,-1, 1],
[ 1,-1, 1],
[ 1, 1, 1],
[-1, 1, 1]], dtype=np.float)
tets = np.array([
[0,1,2,6],
[0,5,1,6],
[0,4,5,6],
[0,7,4,6],
[0,3,7,6],
[0,2,3,6]], dtype=np.int)
Run Code Online (Sandbox Code Playgroud)
当然,在实际应用中,网格中的四面体数量可能很大。我在Google中找不到任何有用的帮助信息。那么绘制四面体网格的更好方法是matplotlib什么呢?
此外,我可以获得网格的所有三角形面。
tri = np.array([
[0 2 1]
[0 1 5]
[0 6 1]
[0 3 2]
[0 2 6]
[0 6 3]
[0 7 3]
[0 5 4]
[0 6 4]
[0 4 7]
[0 6 5]
[0 6 7] …Run Code Online (Sandbox Code Playgroud) 我想就四面体的重心坐标寻求帮助:
按照我在这里找到的方法:http : //www.cdsimpson.net/2014/10/barycentric-coordinates.html 我实现了一个 C++ 函数来查找四面体中一个点的重心坐标:
float ScTP(const Vec &a, const Vec &b, const Vec &c)
{
// computes scalar triple product
return Dot(a, Cross(b, c));
}
Vec4f bary_tet(Vec3f a, Vec3f b, Vec3f c, Vec3f d, Vec3f p)
{
float va, vb, vc, vd, v;
Vec3f vap = p - a;
Vec3f vbp = p - b;
Vec3f vcp = p - c;
Vec3f vdp = p - d;
Vec3f vab = b - a;
Vec3f vac = …Run Code Online (Sandbox Code Playgroud) 我知道四面体的所有坐标和我想确定的点.那么有谁知道怎么做?我试图确定该点属于四面体的每个三角形,如果它对所有三角形都是真的那么该点在四面体中.但这绝对是错误的.
tetrahedra ×5
c++ ×2
mesh ×2
algorithm ×1
c# ×1
coordinates ×1
matplotlib ×1
opengl ×1
python ×1