博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网格最短路径算法(Dijkstra & Fast Marching)(转)
阅读量:7296 次
发布时间:2019-06-30

本文共 1265 字,大约阅读时间需要 4 分钟。

  Dijkstra算法是计算图中节点之间最短路径的经典算法,网上关于Dijkstra算法原理介绍比较多,这里不再多讲。值得一提的是,当图中节点之间的权重都为1时,Dijkstra算法就变化为一般意义上的广度优先搜索算法(Breadth-first search algorithm)。

  Dijkstra算法流程如下:

Dijkstra算法流程

 

 

  在介绍Fast marching算法之前先提下Eikonal方程,Eikonal方程属于非线性偏微分方程,可以认为是一种近似波动方程,它的形式如下:

  Eikonal方程解u(x)的物理含义是从源点x0以速度f(x)到达计算域Ω内x点所需要消耗的最短时间。当f(x) = 1的特殊情况下,方程解就代表计算域Ω内的距离场。

  [Sethian et al. 1999]提出的Fast marching算法是一种求解Eikonal方程的数值方法。下面首先以二维正交栅格(栅格间距为h)为例,将方程左边的梯度项用一阶近似代替后可以得到:

max(U – UA, U – UB, 0)2 + max(U – UC, U – UD, 0)2 = h2/f(x)2

  假设UA = min(UA, UB),UC = min(UC, UD),那么:

(U – UA)2 + (U – UC)2 = h2/f(x)2

  当||UA – UC || ≤ h/f(x)时,

  当||UA – UC || > h/f(x)时,U = min(UA, UC) + h/f(x)。

 

       Fast marching算法也可以用于计算三角网格上的测地距离。对于三角面片x1x2x,,因此,Eikonal方程可以近似变为如下二次方程:

(aTQa)U(x)2 + (2aTQb)U(x) + bTQb = 1/f(x)2

其中:a = [1;1],b = –[Ux1;Ux2],M = [x – x1; x – x2],Q = (MMT–1。通过求解上式方程可以得到x点的测地距离。

  Fast marching算法流程如下:

Fast marching算法流程

 

 

  Dijkstra算法和Fast marching算法思想相似,不同之处在于Dijkstra算法利用节点之间的欧式距离进行更新,而Fast marching算法利用由Eikonal方程化简得到的近似偏微分方程进行更新。

 

 

参考文献:

[1] J. A. Sethian, A. Vladimirsky. Fast methods for the eikonal and related Hamilton-Jacobi equations on unstructured meshes. (1999). Proceedings of the National Academy of Sciences, 97(11), 5699-5703.

http://www.cnblogs.com/shushen/p/5381753.html

 

你可能感兴趣的文章
关于A类,B类,C类IP地址的网段和主机数的计算方法
查看>>
hdu 2087 剪花布条【KMP】
查看>>
linux开发脚本自动部署及监控
查看>>
HTML+css实现图片全屏
查看>>
django+uwsgi+nginx配置及所出问题得解决
查看>>
应届生求职:IT博客真能当技术型职位的求职利器?
查看>>
冠状动脉造影图像分割
查看>>
毕业一年后的思考
查看>>
终于落脚了!
查看>>
MVC页面直接F5出错
查看>>
mysql 文件操作 表
查看>>
shell基础知识
查看>>
HLG 1050 Hot Pursuit II【次短路】
查看>>
css纯样式导航
查看>>
Mongodb数据迁移步骤
查看>>
测试题目
查看>>
Android之Pull解析XML
查看>>
NABCD模型需求分析
查看>>
java08双重循环打印图形
查看>>
类和对象的命名空间
查看>>