代码之家  ›  专栏  ›  技术社区  ›  user6764549

如何使用cgal对球体上移动的一组点进行建模?

  •  0
  • user6764549  · 技术社区  · 6 年前

    我正在努力学习使用cgal。我有问题,关于哪些数据结构和三角剖分方案用于我的问题。

    问题描述:

    我有一小部分(1000)粒子在球体上移动。我要做一个三角形 德劳奈 从这个点云网格。每走一步,我都需要:

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

    问题:

    1. 如何改变与网格相关的点的坐标(三角剖分数据结构、曲面网格、多面体等)顶点而不使三角剖分的迭代器或环行器无效?
    2. 需要重做时如何检查?
    3. 哪种数据结构可以在一次通过整个网格时最快地访问所有边和面?每条边在两个三角形之间共享。边缘的计算是最昂贵的。因此,我只想为每条边计算一次。在所有面上和所有边上分别迭代一次可能效率较低。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Charles Duvert    6 年前

    回答部分问题:

    3 /你可以使用OpenMesh库来计算你的分数。它允许一个人很快到达邻居的第一环 here ,以及所有边和面。我不能确定是不是数据结构提供了最快的访问这些信息。为了给你一个关于速度的提示,在我的工作中,我使用openmesh:运行30个“for”循环,每个循环经过我的网格的50万个顶点的第一个环邻域并计算一些算法(通常是重心),总共需要不到100毫秒。

    1 /使用OpenMead,在任何时候你都可以重置一个点位置而不改变它的连通性(它不会删除已经定义的边和面)。

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

    希望这有帮助!