【CG物理模拟系列】弹性体模拟--Mass Spring及绳子模拟
2016-06-07 16:40
423 查看
介绍
变形体中,变形后能恢复原状的物体称为弹性体,这种物理现象称为弹性变形;反之,发生变形后形状不能恢复的变形称为塑性变形,如黏土。通常的物体都会有弹性体和塑性体两种性质,一定力下发成弹性变形后能恢复原状,到达一定值则发成塑性变形。本篇介绍一个弹性体模拟中最简单,也是曾经最常用的方法:质量弹簧系统(Mass spring system) 。
其应用根据维度可分为以下三种:
一维模拟--绳索(链状) 二维模拟--衣服(三角形面) 三维模拟--柔软物体(四面体面)
原理
假设有N个质点,每个质点质量为m,位置为x,速度为v,质点i(1<i<N)则质量为mi,位置为xi,速度为vi 。 质点间由弹簧结构链接, 如图所示,
其中,i,j 为连接的弹簧质点,lo为弹簧完全放松时的长度,ks为弹簧弹性系数,kd为阻尼系数。则各顶点上的所受的力为弹簧弹力与阻尼力的和,即:
受力分析
根据牛顿第二定律f = ma,在质量m和外力f已知的情况下,加速度可由a=f/m 得到,写成两个一阶方程即为:显式积分为:
若力和速度在△t内连续,则解为,
显示积分问题:
下一刻状态完全由上一刻状态决定,如果timestep △t或者外力(这里假设△t时间内保持不变 )过大,则会导致下一帧渲染时两质点间距离过长,而如果我们事先设置了最大变形长度(即断裂长度),产生的结果便是绳子断开,这也是其不稳定的原因。
绳子模拟
代码参照http://blog.csdn.net/silangquan/article/details/15746855,书写比较规范。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例