从 Qhull 输出中获取 3D Voronoi 单元格



我的目标是从Qhull的qvoronoi子例程的输出中获取单个3D Voronoi单元(顶点和边)。但是,我很难理解沃罗诺伊山脊(输出"Fv")。输出中的示例行为:

7 0 1 1 0 4 5 3

第一个数字是直线中的顶点数,接下来的两个是由脊分隔的顶点的索引,其余的数字是脊上的顶点索引。我天真地尝试连接相邻的顶点(即 4->55->33->1等),它似乎有效,尽管我不确定这是否正确。这些点如何相互连接?

此外,从qvoronoi输出(选项"FN")中,我可以获取每个区域的顶点,但没有关于顶点之间连通性的信息。我想知道这些信息在哪里。它是在脊输出中,还是在不同的qvoronoi输出选项中?

山脊的索引似乎不是按循环顺序排列的。因此,可能无法重建多边形面。

另一种方法是将每个单元的gvoronoi输出传递给qconvex以构建凸包。这不能很好地缩放,但如果要可视化或分析的单元格很少,则可能没问题。

例如,要获取 30 个输入站点中输入站点 5 的 Voronoi 单元:

$ rbox 30 D3 | qvoronoi QV5 p | qconvex G
<</div> div class="one_answers">

尝试凸包

因为 Voronoi 只保证凸多面体,所以有一种通过找到凸包来找到它的黑客方法(在我的例子中,scipy.spatial.ConvexHull() )。 围绕您的Voronoi地区的最小凸包将相当于您想要的,scipy.spatial甚至免费为您提供更多的东西

hull=scipy.spatial.ConvexHull(vertices)
volume=hull.volume
triangle_mesh_hull=vertices[hull.simplices] # shape is (n,3,3)

上面非常短而优雅的台词归功于Jaime。 如果您想在此之后对网格的每个三角形部分执行某些操作,您可以像以下方式访问它:

for triangle in triangle_mesh_hull:
  do_stuff_to(triangle)
  ...
  ...
  ...
  do_more_stuff_with(triangle)
  ...
  ...
  ...

相关内容

  • 没有找到相关文章

最新更新