我有几千个用于建模的四面体网格。我有顶点和曲面信息,它们被索引到两个矩阵中,其中一些是相关的。曲面的节点链接到顶点的矩阵。我想找到哪些顶点相互连接形成四面体。是否有算法来检测形成四面体边缘的顶点的连通性?
答案 0 :(得分:0)
如果您的节点矩阵是邻接矩阵,即最近邻,则选择任何顶点,其形成的某些四面体的其余三个剩余顶点必须满足:
(i)它们是所选顶点的直接邻居,
(ii)他们是彼此的直接邻居。如果不是这样,那么你最终将会遇到四面体交叉。
如果我误解了你的陈述,即它不是邻接矩阵,那么你将不得不做 Delaunay Triangulation 的3D版本,即计算3D Voronoi点云的单元格图。 https://en.wikipedia.org/wiki/Voronoi_diagram
答案 1 :(得分:0)
此链接可帮助您找到算法。 http://mathworld.wolfram.com/Tetrahedron.html
答案 2 :(得分:0)
从可能重复的边缘列表开始:
假设您有一个可能重复边缘的ASCII文件。在Unix系统上,这是一种从中提取唯一边列表的简单方法:
cat edges.txt | awk '{printf "%d %d\n", ($1 < $2 ? $1 : $2), ($1 > $2 ? $1 : $2)}' | sort | uniq > unique_edges.txt
它的作用:
如果你在Windows下,你可以安装cygwin(有awk,sort和uniq)。在其他脚本语言(例如perl)中执行类似的操作也很容易。
从四面体列表开始:
现在,如果你从带有四面体的文件开始,你可以生成一个(重复的)边列表,如下所示(然后你可以运行上面的命令来删除重复项):
cat tetrahedra.txt | awk '{printf "%d %d\n%d %d\n%d %d\n%d %d\n%d %d\n%d %d\n", $1, $2, $1, $3, $1, $4, $2, $3, $2, $4, $3, $4}' > edges.txt
它的作用:它为每个四面体生成6条边,每条边有一条边。
显然,您可以组合这两个命令,直接从四面体文件中提取唯一的边缘列表。