网格弹簧质点系统模拟(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 = 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

时间: 2024-08-05 18:26:45

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

网格弹簧质点系统模拟(Spring-Mass System by Fast Method)

弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长小,两个可视帧之间需要多次积分,而隐式欧拉积分则需要求解线性方程组,但其稳定性好,能够取较大的积分步长.[Liu et al. 2007]文章提出了一种弹簧质点模型的求解方法,它将隐式欧拉积分方法转变为求解最优化问题,并采用迭代分步优化的方法来达到最优解.相比隐式欧拉积分,该方法计算快速,并且精度在可接受范围内. 弹簧质点模型的隐式表达方式如下: (1) (2) 其中:qn和vn分别代表tn时刻质点的

Spring之Enterprise JavaBeans (EJB) integration

原文地址:需要翻墙 https://translate.google.com/translate?hl=zh-CN&sl=zh-CN&tl=zh-CN&u=http%3A%2F%2Fdocs.spring.io%2Fspring-framework%2Fdocs%2Fcurrent%2Fspring-framework-reference%2Fhtml%2Fejb.html&sandbox=1 22.1 介绍 作为一个轻量级容器,Spring被认为是EJB的替代品.我们确实

JMS 之 Active MQ 的spring整合

一.与spring整合实现ptp的同步接收消息 pom.xml: <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.3.7.RE

玩转spring boot——properties配置

前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连接,若有一处配错或遗漏,就会带来不可挽回的损失.正因为这样,spring boot给出了非常理想的解决方案——application.properties.见application-properties的官方文档:http://docs.spring.io/spring-boot/docs/curr

Spring Boot 探索系列 - 自动化配置篇

26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging,Log4J, Log4J2 an

Spring连载(1)

好久没写博文了,最近玩的太浪,打算把spring再复习一遍,以于温故知新. 先敬上一张spring的图 Spring架构图 Spring是一个非常活跃的开源框架,他是一个基于Core来构架多层javaEE系统的框架,它的主要目的就是为了简化企业的开发. Spring是一种非入侵的方式来管理你的代码,Spring提倡"最少侵入".Spring 的每一个模块都是独立的. Spring-IOC 什么是IOC,IOC全称(Inversion of Control)即控制翻转.IOC的作用就是把

springmvc学习总结(二) -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

@[email protected] 写在最前 之前分享过下面这几篇: mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)(附demo和搭建过程遇到的问题解决方法) mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下) springmvc学习笔记(一) -- 从零搭建,基础入门 这一篇,在这些练习的基础上,将它们整合在一起! 搭建步骤如下 一.新建maven项目,配置环境,测试是否配置成

Spring Boot特性(转)

摘要: 1. SpringApplication SpringApplication 类是启动 Spring Boot 应用的入口类,你可以创建一个包含 main() 方法的类,来运行 SpringApplication.run 这个静态方法: public static void main(String... 1. SpringApplication SpringApplication 类是启动 Spring Boot 应用的入口类,你可以创建一个包含 main() 方法的类,来运行 Spri

Spring学习记录-IOC

思想仍然是 将代码转为配置,类的管理交给Spring容器来做. IOC:控制反转,控制权的转移,即应用程序本身不负责依赖对象的创建和维护,而是由 外部容器负责创建和维护.获得依赖的过程被反转,由自身管理变成IOC注入 实现方式DI:依赖注入,创建对象并组装对象之前的关系. Spring允许通过如下几个元素为Bean实例的属性指定值: value.ref.bean.list.set.map.props spring注入也可以给static变量赋值,不一定非要生成对象. spring--Spring