网格最短路径算法(Dijkstra & Fast Marching)(转)
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
网格最短路径算法(Dijkstra & Fast Marching)(转)的更多相关文章
- 最短路径算法Dijkstra和A*
在设计基于地图的游戏,特别是isometric斜45度视角游戏时,几乎必须要用到最短路径算法.Dijkstra算法是寻找当前最优路径(距离原点最近),如果遇到更短的路径,则修改路径(边松弛). Ast ...
- 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)
一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...
- 有向有权图的最短路径算法--Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
- 网格最短路径算法(Dijkstra & Fast Marching)
Dijkstra算法是计算图中节点之间最短路径的经典算法,网上关于Dijkstra算法原理介绍比较多,这里不再多讲.值得一提的是,当图中节点之间的权重都为1时,Dijkstra算法就变化为一般意义上的 ...
- 带权图的最短路径算法(Dijkstra)实现
一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...
- 最短路径算法——Dijkstra算法
在路由选择算法中都要用到求最短路径算法.最出名的求最短路径算法有两个,即Bellman-Ford算法和Dijkstra算法.这两种算法的思路不同,但得出的结果是相同的. 下面只介绍Dijkstra算法 ...
- 最短路径算法——Dijkstra算法与Floyd算法
转自:https://www.cnblogs.com/smile233/p/8303673.html 最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1 ADE:2 ...
- 最短路径算法-Dijkstra
Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...
随机推荐
- 《Swift编程语言》中文翻译及读书笔记page25
The Swift Programming Language读书笔记学习笔记 第25页 本页主要说在swift语言里能够使用分号,但分号不作为每条swift语言语句的结尾 而是间隔写在一行的多条swi ...
- 解决android应用程序适用新老android系统版本方法
老的android系统不能运行高版本系统的新方法,为了解决这个问题: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ...
- Servlet的学习之Response响应对象(1)
在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...
- 基于visual Studio2013解决面试题之0307最后谁剩下
题目
- 头文件 boost/cstdint.hpp
Header boost/cstdint.hpp 头文件 boost/cstdint.hpp 头文件 <boost/cstdint.hpp> 提供了用于编写要求指定整数宽度的可移植代码的 ...
- STL algorithm算法lower_bound和upper_bound(31)
lower_bound原型: function template <algorithm> std::lower_bound default (1) template <class F ...
- 与众不同 windows phone (1) - Hello Windows Phone
原文:与众不同 windows phone (1) - Hello Windows Phone [索引页] [源码下载] 与众不同 windows phone (1) - Hello Windows ...
- 王立平--android中的anim(动画)
简单有用步骤: 1.新建anim目录. 2.在anim下新建xml文件, 3.在xml下编写自己须要动画. 简单样例: 给Imageview加入动画 public class MainActivity ...
- (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)
题目大意:第一行输入一个整数n,表示有n个节点.在接下来的n行中,每行的输入数据的格式是: 1: (2) 4 6 :表示编号为1的人认识2个人,他们分别是4.6: 求,最多能找到多少个人,他们互不认识 ...
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...