Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最短路径&;测地线_Algorithm_Math_Graphics_Computational Geometry_Graph Algorithm - Fatal编程技术网

Algorithm 最短路径&;测地线

Algorithm 最短路径&;测地线,algorithm,math,graphics,computational-geometry,graph-algorithm,Algorithm,Math,Graphics,Computational Geometry,Graph Algorithm,给定一个完全由四边形构成的网格,其中每个顶点都有价n(n>=3),并且不在同一平面上,我需要找到网格中每个顶点与一组闭合种子顶点的距离。也就是说,给定一个或多个网格顶点(一个种子集),我需要构建一个距离贴图,该贴图存储每个网格顶点与种子集的距离(与种子集的距离为0) 在花了一些时间寻找可能的解决方案后,我得到了以下图片: 1) 这不是一件小事,在过去20年左右的时间里,已经开发出了不同的方法 2) 每个考虑3d域的算法都被限制在三角形域 他说,这是我得到的照片: Dijkstra算法可用作沿网格

给定一个完全由四边形构成的网格,其中每个顶点都有价n(n>=3),并且不在同一平面上,我需要找到网格中每个顶点与一组闭合种子顶点的距离。也就是说,给定一个或多个网格顶点(一个种子集),我需要构建一个距离贴图,该贴图存储每个网格顶点与种子集的距离(与种子集的距离为0)

在花了一些时间寻找可能的解决方案后,我得到了以下图片:

1) 这不是一件小事,在过去20年左右的时间里,已经开发出了不同的方法

2) 每个考虑3d域的算法都被限制在三角形域

他说,这是我得到的照片:

Dijkstra算法可用作沿网格边查找两个顶点之间最短路径的方法,但它非常不准确,会导致错误的测地线。Lanthier(LA)提出了一项改进,但误差仍然很大

Kimmel和Sethian(KS)提出了一种快速行进法——FMM——来求解Eikonal方程,解决了计算波从种子点开始的传播并记录波穿过每个顶点的时间的问题。不幸的是,该算法虽然实现起来很简单,但仍然会带来相当不准确的结果,必须小心避免钝角三角形,或者以非常特殊的方式处理它们。 Novotni(NV)解决了单种子方案中的(KS)精度问题,但我不清楚是否:

a) 它仍然受到钝角问题的困扰

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

另一方面,Mitchell&al.(MI)在87年提出了一种精确的算法——MMP——导致0误差,而AFAIK从未真正实现过(可能是由于所需的计算能力)。在相同的精确方法上,Surazhsky&al.(SU)提供了一种基于MMP的替代精确算法,该算法在速度方面应优于后者,但仍能得到正确的结果。不幸的是,计算所需的计算能力,即使远低于原始MMP,仍然足够高,因此实时交互实现在此时是不可行的。 (SU)还提出了精确算法的近似值,他们称之为平坦精确算法。它应采用与FMM相同的计算时间,同时仅带来1/5的误差,但:

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

Chen&Han(CH)和Kapoor(KP)已经提出了其他精确最短路径算法,但是第一种算法速度非常慢,第二种算法太复杂,无法在实践中实现

所以。。底线是:我需要一个距离集合,而不是两点之间的最短路径

如果我做对了

或者我使用FMM在一次传递中得到每个顶点到集合的距离

-或-

使用另一种算法计算从每个网格顶点到每个种子点的测地线,并找到最短的一个(如果我做对了,那就意味着对每个网格顶点的每个种子点调用该算法,也就是说,在10000个顶点网格和50个点的种子集上,我必须计算500000个测地线,才能得到10000个最短的测地线)

我遗漏了什么吗?FMM是在一次传递中处理多种子距离的唯一方法吗?有人知道平面精确算法是否可以用于多种子点场景

thnx

注:

(LA):Lanthier和al.“多面体曲面上加权最短路径的近似计算”

(KS):Kimmel,Sethian“计算流形上的测地线路径”

(NV):Novotni“计算三角形网格上的测地距离”

米切尔和艾尔,《离散测地线问题》

(苏):苏拉日斯基、基尔萨诺夫和艾尔,“网格上的快速精确和近似测地线”

(CH):陈汉,“多面体上的最短路径”


(KP):Kapoor“大地测量最短路径的有效计算”

这可能更适合于理论计算机科学堆栈交换。请参阅这篇关于最短边路径的文章

也许


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

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

链接纸求解网格中每个点到任何子域的距离,包括有限组种子点

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

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

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

是的,最初的FMM存在钝角问题,但研究人员已经解决了这个问题。 这个链接是Gabriel Peyre在matlab中实现的快速行进法。

“b)在多种子点sce中使用时