【问题标题】:How to use CGAL to model a set of points moving on a sphere?如何使用 CGAL 对在球体上移动的一组点进行建模?
【发布时间】:2018-11-20 23:25:21
【问题描述】:

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

问题描述:

我有少量 (Delaunay 网格。在每个时间步,我需要:

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

问题:

  1. 如何在不使三角剖分的迭代器或循环器失效的情况下更改与网格(三角剖分数据结构、曲面网格、多面体等)顶点关联的点的坐标?
  2. 如何检查何时需要重新划分网格?
  3. 哪种数据结构可以在整个网格上一次性访问所有边和面的速度最快?每条边都在两个三角形之间共享。边缘的计算是最昂贵的。因此,我只想为每个边计算一次。对所有面进行一次迭代并分别对所有边进行迭代可能效率较低。

如果需要更多信息,请告诉我。

【问题讨论】:

  • 你如何定义“最近邻的第一环”?作为德劳内的邻居?
  • 再想一想,我意识到你是对的。除非已经存在三角剖分,否则没有第一环邻居的精确定义。所以是的,Delaunay 邻居必须是第一环。我会更新我的问题。

标签: data-structures mesh cgal openmesh


【解决方案1】:

部分回答您的问题:

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

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

2/ 要检查是否需要重新划分网格,您必须检查网格的每个点是否仍满足 Delaunay 条件。如果不是,请重新网格化整个或交换合适的边缘。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 2019-08-09
    • 1970-01-01
    • 2021-04-04
    • 2014-02-27
    • 2014-08-04
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多