高阶Laplace曲面形变算法(Polyharmonic Deformation)
数学上曲面的连续光滑形变可以通过最小化能量函数来建模得到,其中能量函数用来调节曲面的拉伸或弯曲程度,那么能量函数最小化同时满足所有边界条件的最优解就是待求曲面。
能量函数通常是二次函数形式:

其中S*代表关于曲面参数u和v的k阶偏导。
对于上述优化问题的求解方法,通常利用变分法得到对应的Euler-Lagrange方程,然后求解该方程得到最优解。对于二次能量函数形式,其对应的Euler-Lagrange方程为如下多阶调和方程:

例如对于
,那么对应的Euler-Lagrange方程就是2阶Laplace方程Δ2x = 0。上式中Δ代表Laplace算子,边界区域δΩ的限制条件bj保证了系统存在非平凡解。
对于k = 1,上述方程描述的是满足曲面面积最小的表面;对于k = 2,方程描述的是满足曲面弯曲最小的表面,对于k = 3,方程描述的是满足曲面曲率变化最小的表面。
方程的边界条件可以选择Dirichlet边界条件(第一类边界条件),即指定曲面边界点的位置,或者Neumann 边界条件(第二类边界条件),即指定曲面边界点的法向方向。
如果曲面用三角网格形式表示,那么我们在方程中需要使用离散Laplace算子,这是一个线性算子,具体形式在“网格形变算法”中有所解释,其表达式如下:

其中αij和βij为边eij对应的2个对角,N1(pi)表示顶点pi的1环邻域点,A(pi)表示顶点pi的Voronoi面积。
function L = Laplace_Matrix(V, F)
nV = size(V,);
L = sparse(nV,nV);
for i = :
i1 = mod(i-,)+;
i2 = mod(i ,)+;
i3 = mod(i+,)+;
Vec1 = V(F(:,i2),:) - V(F(:,i1),:);
Vec2 = V(F(:,i3),:) - V(F(:,i1),:); cotangle = 0.5 .* dot(Vec1, Vec2, ) ./ norm(cross(Vec1, Vec2, )); L = L + sparse(F(:,i2), F(:,i3), cotangle, nV, nV);
end
L = L + L';
L = -spdiags(full( sum(L,) ), , nV, nV) + L;
end
利用离散线性Laplace算子,方程可以变化为稀疏线性方程组:

其中p = (p1, … , pp)是计算域内的待求点,对应下图中黄色点集;h = (h1, … , hp)是计算域内的控制点,对应下图中红色和蓝色点集,它们代表了方程中的边界条件。需要注意的是为满足求解得到的曲面Ck连续,方程中需要待求点外k+1环的控制点集作为边界条件。








图:k阶能量方程使得曲面边界满足Ck-1连续
左:k = 1,中:k = 2,右:k = 3
本文为原创,转载请注明出处:http://www.cnblogs.com/shushen
参考文献:
[1] Mario Botsch and Leif Kobbelt. 2004. An intuitive framework for real-time freeform modeling. ACM Trans. Graph. 23, 3 (August 2004), 630-634.
高阶Laplace曲面形变算法(Polyharmonic Deformation)的更多相关文章
- python高阶函数——sorted排序算法
python 内置的sorted()函数可以对一个list进行排序: >>> sorted([8,3,8,11,-2]) [-2, 3, 8, 8, 11] 既然说是高阶函数,那么它 ...
- 廖老师JavaScript教程高阶函数-sort用法
先来学习一个新词:高阶函数 高阶函数英文叫Higher-order function.那么什么是高阶函数? JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那 ...
- 三维网格形变算法(Laplacian-Based Deformation)
网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...
- 三维动画形变算法(Laplacian-Based Deformation)
网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...
- JavaScript高阶函数 map reduce filter sort
本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数 一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数 1.高阶函数之map: ...
- [Node.js] 闭包和高阶函数
原文地址:http://www.moye.me/2014/12/29/closure_higher-order-function/ 引子 最近发现一个问题:一部分写JS的人,其实对于函数式编程的概念并 ...
- Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
- Cmd Markdown 高阶语法手册
『Cmd 技术渲染的沙箱页面,点击此处编写自己的文档』 Cmd Markdown 高阶语法手册 1. 内容目录 在段落中填写 [TOC] 以显示全文内容的目录结构. [TOC] 2. 标签分类 在编辑 ...
- JavaScript 高阶函数 + generator生成器
map/reduce map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x ...
随机推荐
- [WCF编程]12.事务:服务事务编程(上)
一.设置环境事务 默认情况下,服务类和操作没有环境事务,即使客户端事务传播到服务端也是如此. 尽管强制事务流从客户端传播过来,但服务端的环境事务依旧为null.为了启用环境事务,每个操作必须告诉WCF ...
- Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现
回到目录 关于逻辑删除 对于逻辑删除之前的做法是在实体类中加个字段,一般是status,其中一种状态是删除,当然也有其它做法,如加个bool的字段IsDeleted,这些其实都过于武断,即它在基类里加 ...
- box-sizing重置盒子模型计算规则
目标大纲 一.语法声明 box-sizing : content-box | border-box | inherit 二.属性值说明 content-box 在宽度和高度之外绘制元素的内边距和边框 ...
- CSS3与页面布局学习笔记(六)——CSS3新特性(阴影、动画、渐变、变形( transform)、透明、伪元素等)
一.阴影 1.1.文字阴影 text-shadow<length>①: 第1个长度值用来设置对象的阴影水平偏移值.可以为负值 <length>②: 第2个长度值用来设置对象的阴 ...
- 熟悉vs2012IDE
使用vs2012已经几个月了,深感对开发环境的学习有助于提高开发的效率.现将我的经验总结如下: 一.搜索 vs2012相比vs2010添加了正则搜索,极大的提高了代码的查询效率. 二.重构 同vs20 ...
- JS中的函数(二):函数参数(你可能不知道的参数传递)
前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本 ...
- jQuery基础_4
dom对象就是jquery对象的数组组成部分jquery对象和dom对象的转化jquery对象-->dom对象$()[下标]dom对象-->jquery对象$(dom对象) jquery框 ...
- [转]实现文字跑马灯效果,scrolling text from right to left
<div> <marquee direction="left" behavior="scroll" scrollamount="10 ...
- app:clean classes Exception
Error:Execution failed for task ':app:clean'.> Unable to delete directory: C:\Users\LiuZhen\Deskt ...
- iOS推送(利用极光推送)
本文主要是基于极光推送的SDK封装的一个快速集成极光推送的类的封装(不喜勿喷) (1)首先说一下推送的一些原理: Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指 ...