三维动画形变算法(Mixed Finite Elements)
混合有限元方法通入引入辅助变量后可以将高阶微分问题变成一系列低阶微分问题的组合。在三维网格形变问题中,我们考虑如下泛函极值问题:

其中u: Ω0 → R3是变形体的空间坐标,上述泛函极值问题对应的欧拉拉格朗日方程就是双调和方程∆2u = 0。
通过引入额外变量v,我们可以将上述无约束高阶优化问题转变为带约束的低阶优化问题:

引入拉格朗日函数,并利用格林公式可以得到:

将变量v,u,λ写成基函数的线性组合形式,并且基函数选择为分段线性帽函数:

将上式分别对变量vi,ui,λi求偏导可以得到:

这里讨论两种边界条件情况:
第一种是固定区域边界条件,就是说在变形体上存在区域Ωf,其对应的空间位置为uf:

求解形式:

消除额外变量后得到:

第二种是固定曲线边界条件,就是说在变形体上存在曲线C,其满足:

求解形式:

消除额外变量后得到:


效果:



本文为原创,转载请注明出处:http://www.cnblogs.com/shushen。
参考文献:
[1] Jacobson A, Tosun E, Sorkine O, et al. Mixed Finite Elements for Variational Surface Modeling. symposium on geometry processing, 2010, 29(5): 1565-1574.
附录
基于三维网格的微分问题求解
对于求解三维网格上带Dirichlet边界条件的泊松方程:

将上式写成等价的弱形式:

其中v是任意的测试函数,但是其满足在边界处值为0。
利用分部积分,可以将上式等式左边进行变化:

由于测试函数在边界处值为0,所以上式中等式右边第一项为0:

然后将待求解函数u和测试函数v表示成基函数的线性组合形式,并且基函数选择为分段线性帽函数:

其中I是网格上所有的顶点集合。
三维网格上分段线性帽函数如下图所示:

那么对于网格内部任意顶点j,我们都取测试函数v = Φj,这样可以形成一个方程:

将积分里的求和提取到积分外,得到:

由于边界处u的数值已知,那么可以将已知项移到等式右侧:

这样就形成了n个方程组,n为三维网格除边界外的顶点个数。
对于求解三维网格上带Neumann边界条件的泊松方程:

同样转换成弱形式,并利用分部积分:

在Neumann边界条件下,我们选择边界处值不为0的测试函数,那么可以得到:

Cotangent权重矩阵L
将Φi定义为分段线性帽函数,那么矩阵L的具体数值就可以根据三维网格模型唯一确定了,另外矩阵L之所以称为Cotangent权重,是因为其具体表达式是一个三角函数形式。
下面具体推导下矩阵L的形式,根据其原始定义表达式:

在每个三角片内∇Φi是恒定的,并且只有在顶点i相邻的周边三角片上是非零值的。对于一个三角片,∇Φi指向的方向与顶点i相对的底边ei垂直,数值大小为三角片在底边ei上高h的倒数,即:

上式中||ei||是边ei的长度,A是三角片的面积。

对于相邻顶点i和j,∇Φi与∇Φj的方向分别垂直于各自的底边ei和ej,它们之间的夹角记为θ,于是我们可以得到:

由于Φi与Φj只有在相邻三角片Tα和Tβ内才同时为非零值,那么:

Mass质量矩阵M
矩阵M的原始定义表达式为:

由于Φi定义为分段线性帽函数,所以Mij只有当i和j为三维网格上相邻顶点或者i和j相同时其值才为非零。

根据积分规则:

其中A是三角片T的面积,x1,x2,x3是三角片三条边的中点。
由于Φi在每个三角片内是个简单的线性函数,那么上式可以进一步表示为:

于是可以得到矩阵M的表达式:

通常矩阵M可以用对角矩阵Md来近似代替,近似过程为:

矩阵Md的对角线元素之和等于三维网格Ω的表面积,一般有两种方式来计算对角线元素,分别为重心质量矩阵和Voronoi质量矩阵,如下图所示。

三维动画形变算法(Mixed Finite Elements)的更多相关文章
- 三维动画形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)
在三维网格形变算法中,个人比较喜欢下面两个算法,算法的效果都比较不错, 不同的是文章[Lipman et al. 2005]算法对控制点平移不太敏感.下面分别介绍这两个算法: 文章[Lipman et ...
- 三维动画形变算法(Laplacian-Based Deformation)
网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...
- 三维动画形变算法(Gradient-Based Deformation)
将三角网格上的顶点坐标(x,y,z)看作3个独立的标量场,那么网格上每个三角片都存在3个独立的梯度场.该梯度场是网格的微分属性,相当于网格的特征,在形变过程中随控制点集的移动而变化.那么当用户拖拽网格 ...
- 在图层上使用CATransform3D制做三维动画-b
在UIView上,我们可以使用CGAffineTransform来对视图进行:平移(translation),旋转(Rotation),缩 放(scale),倾斜(Invert)操作,但这些操作是没有 ...
- Camera三维动画
一.概述 在Android中说到3D开发,我们首先想到的是OpenGL,但用起来比较复杂繁琐,不适合做应用级别的3D变换.Android为我们提供了一个简化版的3D开发入口:Camera(这里的Cam ...
- 高阶Laplace曲面形变算法(Polyharmonic Deformation)
数学上曲面的连续光滑形变可以通过最小化能量函数来建模得到,其中能量函数用来调节曲面的拉伸或弯曲程度,那么能量函数最小化同时满足所有边界条件的最优解就是待求曲面. 能量函数通常是二次函数形式: 其中S* ...
- 三维网格形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)
在三维网格形变算法中,个人比较喜欢下面两个算法,算法的效果都比较不错, 不同的是文章[Lipman et al. 2005]算法对控制点平移不太敏感.下面分别介绍这两个算法: 文章[Lipman et ...
- 三维网格形变算法(Laplacian-Based Deformation)
网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...
- ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画
ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画 概述 计划时间:第4天下午 目的:城市规划容积率计算和建筑三维景观动画 教程: pdf page578 数据:实验数据\Chp13 ...
随机推荐
- 【linux】【redis】redis安装及开启远程访问
系统环境:Centos7 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 1.yum安装过程参考:https ...
- 使用file_get_contents() 发送GET、POST请求
服务器端执行HTTP请求,大家经常使用的就是CURL,curl工具的确是很好的数据文件传输工具,那么除此之外还有其他的工具能实现这个功能吗? 现在为你介绍一个很常见的工具 file_get_conte ...
- jenkins上下游工程以及空间占用处理
1.最近项目架构调整,把十几个java项目整合为一个大的项目,这样构建上游工程成功后下游工程会自动构建 解决如下:取消这个勾选即可 2.构建单个项目时,会把所有子工程都打包一次 解决如下:指定构建时的 ...
- SPSS基础学习方差分析—单因素分析
为什么要进行方差分析? 单样本.两样本t检验其最终目的都是分析两组数据间是否存在显著性差异,但如果要分析多组数据间是否存在显著性差异就很困难,因此用方差分析解决这个问题:举例:t检验可以分析一个班男女 ...
- 【django】分页
分页 1.简单分页 from django.conf.urls import url from django.contrib import admin from app01 import views ...
- 读《深入理解Elasticsearch》点滴-过滤器
1.过滤器不影响文档得分 2.过滤的唯一目的是用特定筛选条件来缩小结果范围:而查询不仅缩小结果范围,还会影响文档的得分 3.过滤器运行更加高效(因为不用计算得分) 4.通常过滤器使用Bits接口,返回 ...
- 使用springboot最新版本mysql-Connector连接数据库时报错解决
在连接数据库时,使用了最新版本的mysql-Connector,即6.0以上版本 1.报错如下: Loading class `com.mysql.jdbc.Driver'. This is depr ...
- ng-cli新建项目
tip:所有的命令是红色标签 , 链接为蓝色标签 使用ng-cli创建新的项目一般需要安装一些新的东西后才可以进行创建成功 1.需要先安装node.js 链接: https://nodejs.org ...
- Shiro集成SSM基于URL权限管理(一)
学习了shiro之后,我们就可以说尝试把shiro加入ssm中,并做一套基于URL的权限管理. 其他的准备工作就不多说了,直接动手操作,看到效果再去理解. 表结构 执行如下,数据库名字可以自行修改,不 ...
- python与数据存储
思考:为什么使用计算机? 存储数据,计算数据 思考:数据存在哪里? 数据存在内存里 内存:内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的 ...