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

  能量函数通常是二次函数形式:

其中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)的更多相关文章

  1. python高阶函数——sorted排序算法

    python 内置的sorted()函数可以对一个list进行排序: >>> sorted([8,3,8,11,-2]) [-2, 3, 8, 8, 11] 既然说是高阶函数,那么它 ...

  2. 廖老师JavaScript教程高阶函数-sort用法

    先来学习一个新词:高阶函数 高阶函数英文叫Higher-order function.那么什么是高阶函数? JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那 ...

  3. 三维网格形变算法(Laplacian-Based Deformation)

    网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...

  4. 三维动画形变算法(Laplacian-Based Deformation)

    网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...

  5. JavaScript高阶函数 map reduce filter sort

    本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数            一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数          1.高阶函数之map:   ...

  6. [Node.js] 闭包和高阶函数

    原文地址:http://www.moye.me/2014/12/29/closure_higher-order-function/ 引子 最近发现一个问题:一部分写JS的人,其实对于函数式编程的概念并 ...

  7. Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted

    1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...

  8. Cmd Markdown 高阶语法手册

    『Cmd 技术渲染的沙箱页面,点击此处编写自己的文档』 Cmd Markdown 高阶语法手册 1. 内容目录 在段落中填写 [TOC] 以显示全文内容的目录结构. [TOC] 2. 标签分类 在编辑 ...

  9. JavaScript 高阶函数 + generator生成器

    map/reduce map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x ...

随机推荐

  1. C#~异步编程再续~async异步方法与同步方法的并行

    返回目录 今天晚上没事写了个测试的代码,又看了看.net的并行编程,两个方法,一个是异步async修饰的,另一个是普通的方法,在控制台程序的Main方法里去调用这两个方法,会有什么结果呢? 首先我们看 ...

  2. swift相关

    1.界面上一个输入框,一个按钮,一个webview .点按钮,webview显示输入框中输入的url的页面. @IBOutlet var wv:UIWebView = nil          //定 ...

  3. 类型转换及返回json对象的问题

    @ResponseBody @RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST publi ...

  4. 5、python第一天作业

    作业一:编写登陆接口 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 分析: 1.流程控制图 2.编写思路 以r+(读写模式)打开文件,读取文件内容字符串,再写入文件,以字符串的长 ...

  5. eclipse中怎么用cmd

    1:点击Run-----External tools------External tools configurations - 如果所示, name:就是工具配置的名字 location:cmd.ex ...

  6. spring-stutrs求解答

    这里贴上applicationContext里的代码: <?xml version="1.0" encoding="UTF-8"?> <bea ...

  7. ABP导航源码分析

    按步骤看: 1,在Global.asax中执行: base.Application_Start(sender, e); 2,在AbpWebApplication类的Application_Start( ...

  8. 【单页应用之通信机制】view之间应该如何通信

    前言 在单页应用中,view与view之间的通信机制一直是一个重点,因为单页应用的所有操作以及状态管理全部发生在一个页面上 没有很好的组织的话很容易就乱了,就算表面上看起来没有问题,事实上会有各种隐忧 ...

  9. javascript 实现一个回文数字

    写一个方法,让"1234"变成回文数字“1234321”,就是顺着读和倒着读都是一样的:注:不让用reverse()方法: function palindrome(str){ va ...

  10. iOS UIScrollView的使用

    一.为什么要用UIScrollView? 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容普通的UIVie ...