网格弹簧质点系统模拟(Spring-Mass System by Euler Integration)
弹簧质点模型是利用牛顿运动定律来模拟物体变形的方法。如下图所示,该模型是一个由m×n个虚拟质点组成的网格,质点之间用无质量的、自然长度不为零的弹簧连接。其连接关系有以下三种:
1.连接质点[i, j]与[i+1,j],[i, j]与[i,j+1]的弹簧,称为“结构弹簧”;
2.连接质点[i, j]与[i+1,j+1],[i+1,j]与[i,j+1]的弹簧,称为“剪切弹簧”;
3.连接质点[i, j]与[i+2,j],[i, j]与[i, j+2]的弹簧,称为“弯曲弹簧”。
这三种弹簧分别用于与结构力(拉力或压力)、剪力和弯矩相关的计算。

弹簧质点运动时受到内力和外力和影响,内力包括弹簧的弹性力和阻尼力,外力包括重力以及空气阻力等。
弹簧的弹性力遵从Hooke定律,质点i和质点j之间的弹性力可以表示为:


其中:
,
,ks表示弹性系数,xi表示质点i的位置,l0表示弹簧的自然长度。
弹簧的阻尼力与质点相对速度在弹簧方向上的分量成正比,可以表示为:


其中:vij = vj – vi,kd表示阻尼系数,vi表示质点i的速度。
牛顿运动定律
是弹簧质点模型的关键,将该二阶微分方程改写成两个一阶微分方程:
(1)
利用显式欧拉积分求解上述微分方程可以得到:
(2)
整个过程的伪代码如下:

显式欧拉积分表示简单,求解快速,但其对积分步长有限制,一旦超过某个临界值T0时,积分结果就会发散。而临界值T0主要与弹簧的弹性系数有关,弹簧的弹性系数越大,临界值T0就越小,对应的步长也越小,这就意味着两个可视帧之间需要更多次的迭代才能使结果稳定。
一种提高积分精度的方法是采用四阶Runge-Kutta积分,其精度能达到O(h4):

整个过程的伪代码如下:

隐式欧拉积分比显式欧拉积分具有更高的稳定性,弹簧质点模型的隐式欧拉积分表达式如下:
(3)
将ft+h一阶泰勒展开
,代入式(3)第一个微分方程得到:

整理得:

两边乘以M:

上式中M是以3×3对角矩阵为子矩阵的对角矩阵,两个Jacobian矩阵
和
都是子矩阵为3×3的对称稀疏矩阵,只有当质点i和质点j之间有弹簧连接时对应的子矩阵才非零(对角线也非零)。隐式欧拉积分需要求解线性方程组来得到下一时刻状态,但是稳定性好,能够取较大的步长进行计算。



参考文献:
[1] David Baraff and Andrew Witkin. 1998. Large steps in cloth simulation. In Proceedings of the 25th annual conference on Computer graphics and interactive techniques (SIGGRAPH '98). ACM, New York, NY, USA, 43-54.
[2] Matthias Müller, Jos Stam, Doug James, and Nils Thürey. 2008. Real time physics: class notes. In ACM SIGGRAPH 2008 classes (SIGGRAPH '08). ACM, New York, NY, USA, , Article 88 , 90 pages.
附录
标量函数对向量的导数:
,其中:x∈Rn。
向量函数对向量的导数(雅克比矩阵):
,其中:f: Rn→Rm,x∈Rn。
向量模对向量的导数:
,其中:
。
单位向量对向量的导数:

利用上述公式可以推导出隐式欧拉积分中Jacobian矩阵中子矩阵的表达式:




参考:
http://blog.mmacklin.com/2012/05/04/implicitsprings
本文为原创,转载请注明出处:http://www.cnblogs.com/shushen。
网格弹簧质点系统模拟(Spring-Mass System by Euler Integration)的更多相关文章
- 网格弹簧质点系统模拟(Spring-Mass System by Verlet Integration)附源码
模拟物体变形最简单的方法就是采用弹簧质点系统(Spring-Mass System),由于模型简单并且实用,它已被广泛应用于服饰.毛发以及弹性固体的动态模拟.对于三角网格而言,弹簧质点系统将网格中的顶 ...
- 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码
弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长小,两个可视帧之间需要多次积分,而隐式欧拉积分则需要求解线性方程组,但其稳定性好,能够取较大的积分步长. ...
- 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码(转载)
转载: https://www.cnblogs.com/shushen/p/5311828.html 弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长 ...
- Unity下实现弹簧骨骼(Spring Bone)
关于这个效果的名称,我一直没找到一个比较正式的说法.Spring Bone这个说法是来自于Anima2D这个插件中的一个演示用的脚本,我直接译成弹簧骨骼. 一般常见于对人物的头发的模拟上. 当然也可以 ...
- Spring之Enterprise JavaBeans (EJB) integration
原文地址:需要FQ https://translate.google.com/translate?hl=zh-CN&sl=zh-CN&tl=zh-CN&u=http%3A%2F ...
- spring boot application.properties 属性详解
2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...
- Spring Boot属性文件配置文档(全部)
This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...
- Spring Boot SSL
转载 https://howtodoinjava.com/spring-boot/spring-boot-ssl-https-example/ Spring Boot SSL 学习如何将Web应用程 ...
- Fluent动网格【13】:网格光顺总结及实例
光顺(Smoothing)方法是最基本的网格节点更新方法.Fluent提供了三种光顺方法: Spring弹簧光顺 Diffusion扩散光顺 Linearly Elastic Solid光顺 三种方法 ...
随机推荐
- 一行代码如何控制ipunt框里面值的长度
<input type="text" id="你的id" maxlength="你想要的长度" onkeyup="thi ...
- 【web前端面试题整理01】各位加班累了吧,来做点前端面试题吧
前言 最近小叶子有点疲惫,主要是在外地工作生活上不太适应,吃一样的东西,我居然会拉肚子,而且是一个星期一个星期的.... 脸上长了一个豆豆一个星期还没消,我那个去啊. 昨天上午上班后,本来想继续研究j ...
- 定制Eclipse IDE之插件篇(一)
上文回顾:定制Eclipse IDE之功能篇(二) 在这篇文章中,我会将我定制eclipse用到的其他插件罗列出来. 一.汉化插件 Eclipse本身是英文显示的,我们能够通过插件汉化. 1. 选择 ...
- Linux机器24项安全合规设置
工作的一些内容,这是中国移动集团当前linux机器安全合规标准,找了点时间将其归类,并查了一些资料,每项配置是什么意思,不仅要知其然,还要知其所以然.好记性不如烂笔头. 1. 检查FTP配置-限制用 ...
- iOS--通讯录(UITableViewController)
本文主要实现通讯录的部分功能(分组名.索引.分组的组名)等等功能: 废话不多说了,先上效果图: 在工程中需要导入一个plist文件,文件图如图: 工程目录文件如图: 工程程序如图所示: RootTab ...
- GitHub Top 100 的项目(iOS)
主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. Android 版本的在此: https://gith ...
- js简单解密(eval解密)
今天看博客园文章,看到一篇比较好的文章. 今天又学会一招,可以对一些采用eval加密的js进行解密. 打开谷歌或者火狐浏览器,然后按 F12,接着把这代码复制进去, 最后,去掉开头 4 个字母 eva ...
- OBST(Optimal Binary Tree最优二叉搜索树)
二叉搜索树 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的 ...
- Comparable接口与Comparator接口的区别
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...
- 回到过去美好的时光——源代码版本管理Always Use source code Control
Don't Repeat Yourself Don't Repeat Yourself,这是程序员修炼之道中的经典名言.源代码版本管理对程序员来说是非常重要的工作.因为它让你能够回到过去,而不用做重复 ...