测地线又称为大地线,可以定义为空间曲面上两点的局部最短路径。测地线具有广泛的应用,例如在工业上测地线最短的性质就意味着最优最省,在航海和航空中,轮船和飞机的运行路线就是测地线。[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
效果:
参考文献:
[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.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示.这次我们演示利用swfupload多文件上传,项 ...
13行代码实现:Python实时视频采集(附源码)
一.前言 本文是系列博文第3部分:程序设计篇(Python版),第1节,本章内容系统介绍:基于Python+open ...
cesium 实现风场图效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
随机推荐
C#中把Datatable转换为Json的5个代码实例
一. /// /// Datatable转换为Json /// ///