【发布时间】:2011-10-19 21:11:08
【问题描述】:
给定一个完全由四边形组成的网格,其中每个顶点的化合价为 n(n >= 3),并且不位于同一平面上,我需要找到网格中每个顶点与封闭集的距离的种子顶点。也就是说,给定一个或多个网格顶点(种子集),我需要构建一个距离图,存储每个网格顶点与种子集的距离(与种子集的距离为 0)。
花了一些时间寻找可能的解决方案后,我得到了以下图片:
1) 这不是微不足道的,在过去 20 年左右的时间里已经开发了不同的方法
2) 考虑到 3d 域的每个算法都被限制为三角形域
说,这是我得到的图片:
Dijkstra 算法可以用来寻找 2 个顶点之间的最短路径,沿着网格的边缘,但它非常不准确,并且会导致错误的测地线。 Lanthier (LA) 提出了改进,但误差仍然很高。
Kimmel 和 Sethian (KS) 提出了一种快速行进法 -FMM- 来求解 Eikonal 方程,解决了计算从种子点开始的波传播并记录波穿过每个顶点的时间的问题。不幸的是,这个算法虽然实现起来很简单,但仍然会带来相当不准确的结果,必须注意避免钝角三角形,或者以非常特殊的方式处理它们。 Novotni (NV) 解决了单个种子场景中的 (KS) 精度问题,但我不清楚是否:
a) 它仍然存在钝角问题
b) 在多种子点场景中使用时,必须为每个种子实现单个 FMM,以便找到每个网格顶点与每个种子的最小距离(即,在 10 个种子点场景中,每个网格顶点必须运行 FMM 10 次)
另一方面,Mitchell & al 提出了一种精确的算法 -MMP- 导致 0 错误。 (MI)在 87 年,而 AFAIK 从未真正实现过(可能是由于所需的计算能力)。在同样的方法上,Surazhsky & al。 (SU) 提供了一种基于 MMP 的替代精确算法,该算法在速度方面应该优于后者,但仍能产生正确的结果。不幸的是,计算所需的计算能力,即使远低于原始 MMP,仍然足够高,以至于此时实时交互实现是不可行的。 (SU) 还提出了他们精确算法的近似,他们称之为 flat-exact。它应该花费与 FMM 相同的计算时间,而只带来 1/5 的误差,但是:
c) 我不清楚它是否可以用于多种子场景。
Chen & Han (CH) 和 Kapoor (KP) 提出了其他精确的最短路径算法,但虽然第一种绝对慢,但第二种过于复杂,无法在实践中实现。
所以.. 底线是:我需要距离集合,而不是 2 点之间的最短路径。
如果我猜对了,
要么我使用 FMM 在单次传递中获取每个顶点与集合的距离,
-或-
使用另一种算法来计算从每个网格顶点到每个种子点的测地线并找到最短的(如果我做对了,这意味着在每个网格顶点的每个种子点上调用该算法,也就是说,在10,000 个顶点网格和 50 个点的种子集,我必须计算 500,000 个测地线才能得到 10,000 个最短的)
我错过了什么吗? FMM 是单程处理多个种子距离的唯一方法吗?有人知道在多种子点场景中是否可以使用 flat-exact 算法?
thnx
注意事项:
(洛杉矶): Lanthier & al. "在多面体表面上逼近加权最短路径"
(KS):Kimmel, Sethian “计算流形上的测地线路径”
(NV):Novotni “计算三角形网格上的测地线距离”
(MI): Mitchell & al. “离散测地线问题”
(SU):Surazhsky、Kirsanov 等人。 “网格上的快速精确和近似测地线”
(CH):Chen, Han,“多面体上的最短路径”
(KP):卡普尔“测地线最短路径的有效计算”
【问题讨论】:
-
您能否更准确地了解使用 dijkstras 算法的问题?特别是不准确的地方来自哪里?网格的边缘是否以某种方式近似于其他结构?对于 dijkstras 算法,使用多个起点应该没有问题,如果拟阵条件成立,它将找到最佳解决方案,所以我在这里没有看到问题。
-
不,我需要测地线,即同一表面上一个点与一组种子点之间的距离。如果曲面本身折叠(例如 U 形),则测地距离和欧几里得距离是不同的
-
您是否告诉我们在您的一个四边形上是插值了什么表面?我知道它确实不位于一个平面上,但计算测地线距离需要对表面进行具体定义。对于三角形,面可以是平坦的,并且测地线距离相对容易。也许您正在寻找一种插值四边形曲面的方法,以使距离计算尽可能简单?
-
我建议将此问题拆分为几个但更具体的子问题,这可能会帮助您找到正确的方法。例如,您可能想问人们对将“this&that”应用于“such...”问题有何看法。换句话说,我担心这个问题太长了,没有赏金得到答案,你还没有积分。
-
听起来您想要网格定义的表面上的距离,但您不一定需要穿过网格的顶点。我同意您发现的参考资料,三角形网格使这更容易,因为您可以通过分段平面补丁来近似您的表面。也许你可以把你的四边形分成几个三角形?只要您的表面曲率不太极端,就可以得到准确的结果。
标签: algorithm math graphics computational-geometry graph-algorithm