gpt4 book ai didi

c++ - Fixed_alpha_shape_3() 是否破坏或修改原始三角剖分?

转载 作者:行者123 更新时间:2023-11-28 04:11:51 30 4
gpt4 key购买 nike

是否Fixed_alpha_shape_3()破坏或修改底层三角剖分?文档说“此操作破坏了三角剖分”但它是否用 alpha 形状三角剖分代替了它?源代码表明它正在修改底层的 delaunay 三角剖分,因为它是 removing vertices。 .此外,三角测量对象是 passed as a reference。也让我觉得 alpha shape 正在修改底层的三角剖分。如果为真,则意味着我们可以在代码的其余部分自然地继续使用原始三角剖分对象。如果三角剖分没有被修改,而是真正被破坏,不再存在,我们是否可以简单地使用 Fixed_alpha_shape_3 对象作为三角剖分对象,因为它 inherits from the Triangulation class

最终目标是确保在 alpha shape 移除边界上的单元格后,在新的三角剖分对象中更新单元格邻居。最重要的是,新的三角剖分对象需要在边界处包含正确的 cell->neighbor(i)->is_inifinite 状态。

例如,原始三角剖分的构造照常进行:

RTriangulation T(points.begin(),points.end());

接着创建 Fixed_alpha_shape_3:

Fixed_alpha_shape_3 as(T);

我知道我们可以使用各种方法访问 alphaShape INTERIOR 和 EXTERIOR 单元格,包括 as.get_alpha_shape_cells(),但如果 Fixed_alpha_shape_3 只是修改原始三角剖分,T,那么我们应该能够继续这样使用 T:

const RTriangulation::Finite_cells_iterator cellEnd = T.finite_cells_end();
for (RTriangulation::Finite_cells_iterator cell = T.finite_cells_begin(); cell != cellEnd; cell++) {
for (int i=0;i<4;i++) {
if (cell->neighbor(i)->is_infinite) cell->info().p = 1;
}
}

或者我可以简单地开始使用 alpha 形状对象:

const RTriangulation::Finite_cells_iterator cellEnd = as.finite_cells_end();
for (RTriangulation::Finite_cells_iterator cell = as.finite_cells_begin(); cell != cellEnd; cell++) {
for (int i=0;i<4;i++) {
if (cell->neighbor(i)->is_infinite) cell->info().p = 1;
}
}

最不理想的解决方案是使用 as.get_alpha_shape_cells() 创建新的单元格列表,因为这将意味着对我们的代码进行重大修改,并进行许多逻辑拆分。我怀疑这不是必需的,这就是为什么我要阐明 Fixed_alpha_shape_3() 的作用。

感谢您的协助。

最佳答案

“毁灭”这个词是一个不吉利的选择。如您所见,类 Fixed_alpha_shape_3 派生自三角剖分类。将对三角剖分 dt 的引用作为输入的构造函数,将其与 dt 交换。所以之后在 dt 中你会发现默认构造的,即空三角剖分。

关于c++ - Fixed_alpha_shape_3() 是否破坏或修改原始三角剖分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57572583/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com