如何使用CGAL模拟在球体上移动的一组点?

时间:2018-06-11 16:33:14

标签: data-structures mesh cgal openmesh

我正在尝试使用CGAL学习。我对我的问题使用哪种数据结构和三角测量方案有疑问。

问题描述:

我有一小部分(<1000)的粒子在球体上移动。我需要从这个点云中制作一个三角形 Delaunay 网格。在每一步,我都需要:

  1. 仅在需要时重新映射点云,以便Delaunay标准仍然存在。独立于点坐标存储网格连接。
  2. 保持拓扑结构固定,使用迭代求解器进行一些优化以计算新的粒子位置。使用相同的连接,求解器迭代次数可以是100或更多。在每次迭代中,计算需要每个三角形的面积以及由边连接的顶点的一些计算(即每个顶点与最近邻居的第一个环相互作用)。
  3. 问题:

    1. 如何更改与网格(三角剖分数据结构,曲面网格,多面体等)顶点关联的点的坐标,而不会使三角剖分的迭代器或循环器失效?
    2. 如何检查何时需要重新网格化?
    3. 哪种数据结构可以在整个网格上单次传递中最快地访问所有边和面?每个边缘在两个三角形之间共享。边缘的计算是最昂贵的。因此,我想只为每个边计算一次。在所有面上迭代一次并在所有边上单独迭代可能效率较低。
    4. 如果需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

为您的问题提供部分答案:

3 /您可以使用openmesh库对点进行网格化。如here所述,它可以使人非常快速地到达邻居的第一环,也可以到达所有边缘和面。我不能确定是否是最快访问这些信息的数据结构。为了告诉您期望的速度,在我的工作中,我使用openmesh:运行30个“ for”循环,每个循环遍历我的网格的500 000个顶点的第一个环形邻居,并计算一些算术(通常是重心) ),总共不到100毫秒。

1 /使用openmesh,您随时可以在不更改其连接性的情况下重置点位置(它不会删除已经定义的边缘和面)。

2 /要检查是否需要重新网格化,必须检查网格的每个点是否都满足Delaunay条件。如果不是这样,则重新修剪整个边缘或交换合适的边缘。

希望这会有所帮助!