网格弹簧质点系统模拟(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光顺 三种方法 ...
随机推荐
- oracle表的管理
表名和列的命名规则 必须以字母开头: 长度不能超过30字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z,a-z,0-9,$,#等: 数据类型: 字符型: char 定长 ...
- JavaScript强化教程——JavaScript 总结
本教程中我们向您讲授了如何向 html 页面添加 JavaScript,使得网站的动态性和交互性更强. 你已经学习了如何创建对事件的响应,验证表单,以及如何根据不同的情况运行不同的脚本. 你也学到了如 ...
- Atitit.Atiposter 发帖机 信息发布器 v7 q516
Atitit.Atiposter 发帖机 信息发布器 v7 q516 V7 jetty 版本 基本访问改为web版. 这样发布调试 V1 初步实现sina csdn cnblogs V2 实现qz ...
- MSCRM 用户登录日志
MSCRM中关于用户登录信息,默认是不显示的,但是许多客户又有相关的需求. 下面将介绍给大家方法: 一.开启系统审核功能和用户访问审核. 二.打开设置中审核视图. 三.在过滤事件中选择“用户通过web ...
- SharePoint 2013 JavaScript API 记录
1.获取创建者字段(Author),oListItem为SPListItem对象 oListItem.get_item('Author')只能获取到对象,获取用户名要用oListItem.get_it ...
- 折腾一天的WordPress
自从昨天开始要写博客,在网上找了找大家都比较推崇著名的WordPress,所以自己就闲来无事要坐下测试弄一个,不弄不知道,一弄折磨人啊,公司的破网直接想让我崩溃,所以这一天就在这搭建环境中度过,不过值 ...
- 操作系统开发系列—13.i.进程调度 ●
上面的三个进程都是延迟相同的时间,让我们修改一下,尝试让它们延迟不同的时间. void TestA() { int i = 0; while (1) { disp_str("A." ...
- <转>最新版SDWebImage的使用
我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了.研究发现, ...
- Swift tour
输出函数: print(“hello world!") 无需引入函数库,无须使用“;”作为语句结尾,也无须写跟其它语言一样的main()函数,Swift中,全局区的代码就是程序入口.You ...
- 在eclipse中安装上genymotion插件
1.安装genymotion-vbox,选择安装目录. 具体安装过程可见http://www.cnblogs.com/wuyudong/p/5601897.html 2.登录并创建模拟器 3. ...