获取网格中的连续面

Posted

技术标签:

【中文标题】获取网格中的连续面【英文标题】:Get Contiguous Faces In a Mesh 【发布时间】:2018-09-12 16:03:41 【问题描述】:

我正在寻找一种算法来查找连续网格的所有(或最大数量)连续面。这些面应该以这样的方式排列在一个数组中,即每个面之前都有一个在网格上链接到它的面。最终目标是拥有一个这样的阵列。即使在理论上也有可能吗?如果不是,那么最大化数组中面数的最佳方法是什么?

在this (rather naive) implementation 中,选择点顺时针遍历最后覆盖面的可用边的结束顶点。但这很快就陷入了死胡同。我还尝试了边的两端,或者面的所有可用顶点,但迟早每个顶点都会到达与未选择的面没有连接的面。

编辑:

这是一个三角网格,即每个面正好有三个顶点。并且要求有一组最少的数组(理想情况下是一个)覆盖网格的所有连接面。

【问题讨论】:

你是如何表示网格的?另外,您如何定义不连续性?理想情况下,我认为网格形状良好并且没有“孔”。不是每一张脸都可以从其他每一张脸接触到吗? 【参考方案1】:

这是一个难题(平面图中的Hamiltonian path problem(特别是输入图的对偶)),但使用局部搜索方法可能会得到很好的结果。由于 Angluin 和 Valiant (https://doi.org/10.1016/0022-0000(79)90045-X) 和 Frieze (https://doi.org/10.1002/rsa.20542) 的更复杂的努力,有一个简单的。这些算法在理论上被证明仅适用于随机图,但没有对抗性构造的图通常也适用。

【讨论】:

我也在考虑这个问题,虽然我不知道是否有一些拓扑方法可以简化它。看着Wikipedia,据说4-连通平面图总是有一条哈密顿路径,它可以在线性时间内计算,所以我想它总是可以用于四边形的封闭网格。我不确定这是否太令人惊讶。这也是假设网格是“格式良好的”(歧管),否则我认为图形不必是平面的? @jdehesa 当然。这些算法适用于一般图。 这个(Angluin 和 Valiant)看起来很有前途。不过,我需要一些时间来理解和实施它。当我在实现方面取得一些进展时,将在此线程上分享结果。 我非常感谢任何能够访问引用的资源并对其进行简单解释的人。 @AndrewMicallef 简短的版本是:随机扩展路径,如果它自行循环,则删除与 3 度顶点相关的循环边之一,然后在另一端继续。跨度>

以上是关于获取网格中的连续面的主要内容,如果未能解决你的问题,请参考以下文章

bootstrap - 网格系统 - 连续折叠/展开 1 个项目

在变量中绘制连续和离散数据

如何正确地连续添加到引导程序以修复移动到多行的网格系统

将2D阵列分成由连续线限定的区域

获取 NumPy 数组中的连续命中数及其第一个/最后一个索引

获取连续记录视图的持续时间