【问题标题】:shortest paths & geodesics最短路径和测地线
【发布时间】: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


【解决方案1】:

有一篇新论文准确地讨论了如何解决您的问题:Geodesics in Heat。 (刚刚发现它,它让我想起了你的问题。)这个想法是热方程可以被认为是描述粒子从某个中心点的扩散。尽管它模拟了随机扩散,但如果您运行热方程足够短的时间,那么从 A 到 B 的任何粒子都必须遵循最短路径,因此从数学上您可以估算距离。

问题在于,沿着接近最短路径的路径的粒子比例很小,因此您必须求解一个微分方程,该微分方程在某个区域开始很大,然后在其他地方迅速结束。这在数字上不太可能表现得很好。诀窍在于,对于较大的 t,即使它不能正确测量距离,它也会给出距离函数的梯度,这可以与其他方法一起使用来获得距离。

TL;DR 链接的论文解决了从网格中的每个点到任何子域的距离,包括有限的种子点集。

哦……我自己还没有测试过。

【讨论】:

    【解决方案2】:

    “a) 它仍然存在钝角问题”

    是的,最初的 FMM 存在钝角问题,但研究人员已经解决了这个问题。 这个链接是Gabriel Peyre在matlab中实现快进法。 http://www.mathworks.com/matlabcentral/fileexchange/6110-toolbox-fast-marching

    "b) 在多种子点场景中使用时,必须为每个种子实现单个 FMM,以便找到每个网格顶点与每个种子的最小距离(即,在 10 个种子点场景中) , FMM 必须每个网格顶点运行 10 次)"

    如果你的意思是多源最短路径问题,快速行进方法不需要运行多次。例如,对于种子 s1 和 s2,以及目的地 v,并且 s1 和 v 之间的最短距离为 d(s1,v),s2 和 v 之间的距离为 d(s2,v)。要找到 v 和 s1,s2 之间的最短距离,min(d(s1,v),d(s2,v)),运行一次快速行进方法就足够了。但是如果你想同时知道 d(s1,v) 和 d(s2,v),你需要多次运行 FMM。

    “另一方面,Mitchell & al. (MI) 在 87 年提出了导致 0 错误的精确算法 -MMP-,而 AFAIK 从未真正实现过(可能是由于所需的计算能力) . 在相同的精确方法上,Surazhsky & al. (SU) 提供了一种基于 MMP 的替代精确算法,该算法在速度方面应该优于后者,仍然可以得出正确的结果。不幸的是,计算所需的计算能力,即使比原来的 MMP 少得多,但仍然足够高,以至于此时实时交互实现是不可行的。(SU)还提出了他们精确算法的近似,他们称之为 flat-exact。它应该花费相同的计算时间FMM,虽然只带来了 1/5 的误差,但是:"

    cmets:MMP 在 2005 年有一个实现,该实现发表在 [1] 中。代码链接在https://code.google.com/p/geodesic/

    “c) 我不清楚它是否可以用于多种子场景。”

    可以在多种子场景中使用,上面的代码实现了。

    “Chen & Han (CH) 和 Kapoor (KP) 提出了其他精确的最短路径算法,但第一个算法绝对慢,第二个算法太复杂,无法在实践中实现。”

    cmets:第一个很慢,但是在 [2] 中作者改进了 CH 算法并给出了一个比 MMP 更精确且更快的实际实现。代码在 sites.google.com/site/xinshiqing/knowledge-share

    [1]维塔利·苏拉日斯基、塔蒂亚娜·苏拉日斯基、丹尼尔·基尔萨诺夫、史蒂文·戈特勒、休斯·霍普。网格上的快速精确和近似测地线。 ACM 翻译。图形 (SIGGRAPH),24(3),2005。

    [2]改进 Chen & Han 的离散测地线问题算法。辛世清、王国瑾。 ACM 图形事务 (TOG):28(4),第 1-8 页,2009 年 8 月。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      另一个选项:Euclidean Shortest Path Algorithm 这是最近 (2012) 的最短路径通用实现。

      【讨论】:

        猜你喜欢
        • 2014-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-25
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多