测地线距离matlab,⽹格测地线算法(GeodesicsinHeat)附源
码
测地线⼜称为⼤地线,可以定义为空间曲⾯上两点的局部最短路径。测地线具有⼴泛的应⽤,例如在⼯业上测地线最短的性质就意味着最优最省,在航海和航空中,轮船和飞机的运⾏路线就是测地线。[Crane et al. 2013]提出了利⽤热运动⽅程来计算⽹格测地线的⽅法,可以想象⼀下,当⼀根烫的针尖接触到曲⾯上的⼀点时,热量会随着时间的推移⽽扩散,测地距离因此可以和热运动相联系。具体算法过程如下图所⽰:
第⼀步:热运动⽅程⽤来描述热的传播状态:
将热运动⽅程离散化并整理后得到:
其中:id为单位矩阵,t为时间间隔,Δ为离散Laplacian算⼦,ut为t时刻的热状态,u0为初始时刻的热状态。
第⼆步:第⼀步计算得到的热梯度⽅向与测地距离的梯度⽅向相同,由Eikonal⽅程知道测地距离的梯度为单位向量,于是通过归⼀化热梯度我们得到测地距离的梯度:
第三步:得到测地距离的梯度之后,测地线问题即变为求解以下式⼦:
根据变分法,上式最⼩化即求解泊松⽅程:
其中:Φ即为⽹格上顶点距离源点的测地距离。
function [D] = geodesics_in_heat(V, F, src)
% choose time step
c = ;
t = c * mean(doublearea(V, F))/;
%% Step : Integrate the heat flow for some fixed time t
L = cotmatrix(V, F);
M = massmatrix(V, F, 'barycentric');
nV = size(V, );
u0 = zeros(nV, );
u0(src) = ;
A = M - t*L;
B = M*u0;
nsrc = length(src);
% 1.1 dirichlet condition
hole = Cal_Boundary(F);
if isempty(hole)
boundary = [];
else
boundary = hole.boundary.edge(:,)';
end
b = setdiff(boundary, src);
nb = [b, src];
Acons = sparse([:length(nb)], nb, ones(,length(nb)), length(nb), nV); Bcons = [zeros(length(b), ); ones(nsrc, )];
% 硬约束
r = setdiff([:nV], nb);
uD = [A(r,:);Acons]\[B(r,:);Bcons];
% 1.2 neumann condition
Acons = sparse([:nsrc], src, ones(,nsrc), nsrc, nV);
Bcons = ones(nsrc, );
% 硬约束
r = setdiff([:nV], src);
uN = [A(r,:);Acons]\[B(r,:);Bcons];
% averaged boundary condition
u = 0.5*(uN + uD);
%% Step : Evaluate the vector field X
G = grad(V, F); % nF* by nV matrix(梯度算⼦ - 所有三⾓⽚顶点基函数)
grad_u = reshape(G*u, size(F,), ); % nF by nV matrix(所有三⾓⽚中u的梯度) grad_u_norm = sqrt(sum(grad_u.^, ));
normalized_grad_u = bsxfun(@rdivide, grad_u, grad_u_norm+eps);
X = -normalized_grad_u;
%% Step : Solve the Poisson equation
Div = div(V, F); % 散度算⼦
div_X = Div*X(:); % #nV by #nF*
Lcons = sparse([:nsrc], src, ones(,nsrc), nsrc, nV);
div_Xcons = zeros(nsrc, );
% 硬约束
r = setdiff([:nV], src);
D = [L(r,:);Lcons]\[div_X(r,:);div_Xcons];
D = D - min(D);
end
jquery源码在线效果:
参考⽂献:
[1] Keenan Crane, Clarisse Weischedel, and Max Wardetzky. 2013. Geodesics in heat: A new approach to computing distance based on heat flow. ACM Trans. Graph. 32, 5, Article 152 (October 2013), 11 pages.
在⽹站开发中很有⽤的8个 jQuery 效果【附源码】
jQuery 作为最优秀 JavaScript 库之⼀,改变了很多⼈编写 JavaScript 的⽅式.它简化了 HTML ⽂档遍历,事件处理,动画和 Ajax 交互,⽽且有成千上万的成熟 jQuer ...
Web 开发中很实⽤的10个效果【附源码下载】
在⼯作中,我们可能会⽤到各种交互效果.⽽这些效果在平常翻看⽂章的时候碰到很多,但是⼀时半会⼜想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇⽂章给⼤家推荐10个在 Web 开发中很有⽤的效果,记 ...
精选12个时尚的 CSS3 效果【附源码下载】
这⾥是精选的12个很炫的 CSS3 效果.CSS3 是对 CSS 规范的⼀个很⼤的改善和增强,它使得 Web 开发⼈员可以很容易的在⽹站中加⼊时尚的效果.以前很多需要编写复杂的 JavaScript ...
8个前沿的 HTML5 &; CSS3 效果【附源码下载】
作为⼀个前沿的 Web 开发者,对于 HTML5 和 CSS3 技术或多或少都有掌握.前⼏年这些新技术刚萌芽的时候,开发者们已经使⽤它们来⼩试⽜⼑了,如今这些先进技术已经遍地开发,特别是在移动端⼤显⾝ ...
使⽤ CSS3 实现 3D 图⽚滑块效果【附源码下载】
使⽤ CSS3 的3D变换特性,我们可以通过让元素在三维空间中变换来实现⼀些新奇的效果. 这篇⽂章分享的这款 jQuery ⽴体图⽚滑块插件,利⽤了 3D transforms(变换)属性来实现多种不 ...
C#编程总结(七)数据加密——附源码
C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明⽂的⽂件或数据按某种算法进⾏处理,使其成为不可读的⼀段代码,通常称为“密⽂”,使其只能在输⼊相应的密钥之后才能显⽰出本来内容 ...
swfupload多⽂件上传[附源码]
swfupload多⽂件上传[附源码] ⽂件上传这东西说到底有时候很痛,原来的asp服务器控件提供了很简单的上传,但是有回传,还没有进度条提⽰.这次我们演⽰利⽤swfupload多⽂件上传,项 ...
13⾏代码实现:Python实时视频采集(附源码)
⼀.前⾔ 本⽂是系列博⽂第3部分:程序设计篇(Python版),第1节,本章内容系统介绍:基于Python+open ...
cesium 实现风场图效果(附源码下载)
前⾔ cesium 官⽹的api⽂档介绍地址cesium官⽹api,⾥⾯详细的介绍 cesium 各个类的介绍,还有就是在线例⼦:cesium 官⽹在线例⼦,这个也是学习 cesium 的好素材. 内 ...
随机推荐
C#中把Datatable转换为Json的5个代码实例
⼀. /// /// Datatable转换为Json /// ///
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论