网格测地线算法(Geodesics in Heat)附源码
测地线又称为大地线,可以定义为空间曲面上两点的局部最短路径。测地线具有广泛的应用,例如在工业上测地线最短的性质就意味着最优最省,在航海和航空中,轮船和飞机的运行路线就是测地线。[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
效果:



本文为原创,转载请注明出处:http://www.cnblogs.com/shushen。
参考文献:
[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.
网格测地线算法(Geodesics in Heat)附源码的更多相关文章
- Vue过渡和动画效果展示(案例、GIF动图演示、附源码)
前言 本篇随笔主要写了Vue过渡和动画基础.多个元素过渡和多个组件过渡,以及列表过渡的动画效果展示.详细案例分析.GIF动图演示.附源码地址获取. 作为自己对Vue过渡和动画效果知识的总结与笔记. 因 ...
- 在网站开发中很有用的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实时视频采集程序设计>,本章内容系统介绍:基于Python+open ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
随机推荐
- CSS3 一、文本阴影text-shadow属性
文本阴影text-shadow属性特效: 1.右下角阴影,左下角阴影,左上角阴影,右上角阴影 <!DOCTYPE html> <html lang="en"> ...
- Eclipse开发STM32出现找不到函数的情况的解决方法
问题表现: 在明明引用了头文件的情况下,出现“undefined reference to `…'”的情况,例如下图: 解决方法: 在左边的数据目录定位到“system\src\stm32f0-st ...
- spring+ibatis+多数据源
环境:spring3.1+ibatis2.3.4+oracle+hbase要求:需要在工程中操作两个不同的数据源,一个是mssql,另一个是hbase.实现: <bean id=" ...
- sharepoint2013- Office web app server2013详细的安装和部署
前提条件 Office web app server2013不能跟sharepoint server2013安装在同一台服务器上,如果安装在同一台服务器上将提示如下错误: 后来查询资料: 按照官方文 ...
- 一个插件让你在chrome直接运行apk
插件的下载地址: https://chrome.google.com/webstore/detail/arc-welder/emfinbmielocnlhgmfkkmkngdoccbadn?utm_s ...
- 微信公众号里打开链接下载APP
嵌入这样的代码 <a href="http://a.app.qq.com/o/simple.jsp?pkgname=com.violationquery" target=&q ...
- Android 沉浸式状态栏 实现方式二 ( 更简单 )
以前写过一个沉浸式状态栏 的实现方式 Android 沉浸式状态栏 实现方式一 现在有个更为简单的实现方式 . 相关链接 http://www.apkbus.com/forum.php?mod=vie ...
- Android 的系统架构
Android 的系统架构 Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所 ...
- Listener监听器与Filter过滤器
1.Listener [1]监听器简介 > Listener是JavaWeb的三大组件之一,Servlet.Filter.Listener > Li ...
- DIV+CSS实现左侧带三角形的提示框
实现效果