弹簧质点模型是利用牛顿运动定律来模拟物体变形的方法。如下图所示,该模型是一个由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 = vjvi,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→Rmx∈Rn

向量模对向量的导数:

,其中:

单位向量对向量的导数:

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

参考:

http://blog.mmacklin.com/2012/05/04/implicitsprings

本文为原创,转载请注明出处:http://www.cnblogs.com/shushen

网格弹簧质点系统模拟(Spring-Mass System by Euler Integration)的更多相关文章

  1. 网格弹簧质点系统模拟(Spring-Mass System by Verlet Integration)附源码

    模拟物体变形最简单的方法就是采用弹簧质点系统(Spring-Mass System),由于模型简单并且实用,它已被广泛应用于服饰.毛发以及弹性固体的动态模拟.对于三角网格而言,弹簧质点系统将网格中的顶 ...

  2. 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码

    弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长小,两个可视帧之间需要多次积分,而隐式欧拉积分则需要求解线性方程组,但其稳定性好,能够取较大的积分步长. ...

  3. 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码(转载)

    转载:  https://www.cnblogs.com/shushen/p/5311828.html 弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长 ...

  4. Unity下实现弹簧骨骼(Spring Bone)

    关于这个效果的名称,我一直没找到一个比较正式的说法.Spring Bone这个说法是来自于Anima2D这个插件中的一个演示用的脚本,我直接译成弹簧骨骼. 一般常见于对人物的头发的模拟上. 当然也可以 ...

  5. Spring之Enterprise JavaBeans (EJB) integration

    原文地址:需要FQ https://translate.google.com/translate?hl=zh-CN&sl=zh-CN&tl=zh-CN&u=http%3A%2F ...

  6. spring boot application.properties 属性详解

    2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...

  7. Spring Boot属性文件配置文档(全部)

    This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...

  8. Spring Boot SSL

    转载  https://howtodoinjava.com/spring-boot/spring-boot-ssl-https-example/ Spring Boot SSL 学习如何将Web应用程 ...

  9. Fluent动网格【13】:网格光顺总结及实例

    光顺(Smoothing)方法是最基本的网格节点更新方法.Fluent提供了三种光顺方法: Spring弹簧光顺 Diffusion扩散光顺 Linearly Elastic Solid光顺 三种方法 ...

随机推荐

  1. Font Combiner – 自定义网页字体和图标生成工具

    Font Combiner 是一个功能丰富的 Web 字体生成工具和字体改进工具,提供字距调整.构造子集.各种提示选项和自定义字体字形组合.您可以生成您自己的自定义字体的格式和文件大小. 另外还有成千 ...

  2. FormsAuthentication身份认证源代码

    使用FormsAuthentication类可以实现身份认证功能,这里提供一个asp.net项目的源代码,项目名称KWS.项目实现了登录.退出和判断身份的功能. 关于项目 点击这里下载源代码 http ...

  3. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  4. php获取数组第一个值 current()

    获取数组第一个元素的值,如果是数字索引那还好,直接$array[0],如果键名是字符串,你又未知这个字符串呢?用current()函数就可以做到. current() 函数返回数组中的当前元素(单元) ...

  5. ie7下<a></a>标签中<input />时不反应

    <a href="News?id=@dr["id"].CInt()" ><input type="button" valu ...

  6. crm2013关于contentIFrame不能使用

    在CRM2011里面,我们可以在页面的控制台里面输入: contentIFrame.Xrm.Page.data.entity.getEntityName(); contentIFrame.Xrm.Pa ...

  7. sharepoint app 开发环境配置

    1. 配置脚本如下: .通过打开命令提示符并键入以下命令来确保 spadmin 和 sptimer 服务正在运行. net start spadminv4 net start sptimerv4 .作 ...

  8. Iphone 英语语言下通讯录排序问题

    Iphone 如果把界面语言设置成English,那么通讯录默认排序是通过拼音来排的,如果联系人信息中没有设置名字的拼音,那么这些联系人都会被放到#中. 批量添加拼音的解决方案: https://gi ...

  9. android编译系统的makefile文件Android.mk写法

    Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件.由于一般情况下Android.mk和需要编译的源文件在同一目录下,宏函数“my-dir”右编译系统提供的,用于返回当前路径 ...

  10. 【代码笔记】iOS-获得现在的时间

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...