网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码
弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长小,两个可视帧之间需要多次积分,而隐式欧拉积分则需要求解线性方程组,但其稳定性好,能够取较大的积分步长。[Liu et al. 2007]文章提出了一种弹簧质点模型的求解方法,它将隐式欧拉积分方法转变为求解最优化问题,并采用迭代分步优化的方法来达到最优解。相比隐式欧拉积分,该方法计算快速,并且精度在可接受范围内。
弹簧质点模型的隐式表达方式如下:
(1)
(2)
其中:qn和vn分别代表tn时刻质点的位置和速度,f(qn)为tn时刻质点所受到的力,M为质点的质量,h为步长。
利用式(1)我们可以得到:
(3)
(4)
将式(3)减式(4)并与式(2)结合得到:
(5)
记x = qn+1,y = 2qn – qn-1,式(5)可以变化为:
(6)
式(6)的解其实对应于如下函数的临界点:
(7)
于是弹簧质点模型问题可以变化为最优化问题minx g(x),即最小化函数g(x)。
函数E(x)中最重要的部分是弹簧势能,根据Hooke定律,可以推导得到两个质点间弹簧的势能为:
(8)
其中:k为弹簧的弹性系数,r为弹簧的自然长度。
因此弹簧质点模型中弹簧的整体势能也可以变化为最优化问题,即最小化如下函数:
(9)
其中:L = A·K·AT,J = A·K,式中A∈Rm×s(m为质点数量,s为弹簧数量),并且Ai1,i=1,Ai2,i= -1,K∈Rm×m为对角矩阵,Ki,i = ki。
如果考虑其他外力(如重力等),那么函数E(x)的表达式为:
(10)
其中:
是所有弹簧为自然长度时的方向。
将函数E(x)的表达式(10)代入式(7),整理后得到最终的优化表达式:
(11)
对于上述优化问题,可以分两步进行,将前一时刻的质点位置作为初始值x,首先固定x优化d,然后固定d优化x,然后重复上述迭代步骤直到满足设定的迭代步数。


function [X, V] = spring_mass_fast(X0, V0, E, b, bc, R, h)
% This code implements algorithm of the following paper:
% "Fast Simulation of Mass-Spring Systems" m = size(X0,); % vertex number
s = size(E,); % spring number if ~exist('R', 'var')
R = normrow(X0(E(:,),:) - X0(E(:,),:));
end damping = 0.02;
drag = - damping;
stiffness = 1e1;
K = stiffness*ones(s,);
mass = 0.01;
M = diag(mass*ones(m,));
g = [ -9.8];
fext = repmat(mass*g, [m,]); A = sparse(E,[:s;:s]',repmat([1,-1],s,1),m,s); L = A*diag(K)*A';
J = A*diag(K); X = X0;
iter = ;
max_iter = ;
while true
% step1: Fix X and find D
D = X(E(:,),:) - X(E(:,),:);
D = bsxfun(@times, D, R./normrow(D)); % step2: Fix D and find X
X = solve_equation(M + h^*L, h^*(fext + J*D) + M*(X0 + V0*h), b, bc); iter = iter + ;
if iter == max_iter
break;
end
end
V = drag*(X - X0)/h;
end
本文为原创,转载请注明出处:http://www.cnblogs.com/shushen。
相关:
弹簧质点系统(Euler Integration):http://www.cnblogs.com/shushen/p/5473264.html
弹簧质点系统(Verlet Integration):http://www.cnblogs.com/shushen/p/5394431.html
参考文献:
[1] Tiantian Liu, Adam W. Bargteil, James F. O'Brien, and Ladislav Kavan. 2013. Fast simulation of mass-spring systems. ACM Trans. Graph. 32, 6, Article 214 (November 2013), 7 pages.
网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码的更多相关文章
- 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码(转载)
转载: https://www.cnblogs.com/shushen/p/5311828.html 弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长 ...
- 网格弹簧质点系统模拟(Spring-Mass System by Verlet Integration)附源码
模拟物体变形最简单的方法就是采用弹簧质点系统(Spring-Mass System),由于模型简单并且实用,它已被广泛应用于服饰.毛发以及弹性固体的动态模拟.对于三角网格而言,弹簧质点系统将网格中的顶 ...
- 网格弹簧质点系统模拟(Spring-Mass System by Euler Integration)
弹簧质点模型是利用牛顿运动定律来模拟物体变形的方法.如下图所示,该模型是一个由m×n个虚拟质点组成的网格,质点之间用无质量的.自然长度不为零的弹簧连接.其连接关系有以下三种: 1.连接质点[i, j] ...
- Spring AOP实现方式三【附源码】
注解AOP实现 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Administrator ...
- Spring AOP实现方式二【附源码】
自动代理模式[和我们说的方式一 配置 和 测试调用不一样哦~~~] 纯POJO切面 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /* ...
- Spring AOP实现方式一【附源码】
基本代理模式 纯POJO切面 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Admin ...
- 快速开发架构Spring Boot 从入门到精通 附源码
导读 篇幅较长,干货十足,阅读需花费点时间.珍惜原创,转载请注明出处,谢谢! Spring Boot基础 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计 ...
- Java Web开发框架Spring+Hibernate整合效果介绍(附源码)
最近花了一些时间整合了一个SpringMVC+springAOP+spring security+Hibernate的一套框架,之前只专注于.NET的软件架构设计,并没有接触过Java EE,好在有经 ...
- Java Web开发框架Spring+Hibernate整合效果介绍(附源码)(已过期,有更好的)
最近花了一些时间整合了一个SpringMVC+springAOP+spring security+Hibernate的一套框架,之前只专注于.NET的软件架构设计,并没有接触过Java EE,好在有经 ...
随机推荐
- html5 前端图片处理(预览、压缩、缩放)
现在手机图片是越来越大了,上传图片流量耗费巨大.同时预览也是一个问题,所以利用HTML5 file和canvas来解决这个问题. var upload = { _o: null,//对象id _aut ...
- WCF入门教程(二)如何创建WCF服务
WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) ...
- Netbeans 8.2关于PHP的新特性
Netbeans 8.2在这个国庆期间终于发布了,其与PHP相关的新特性主要有: 支持PHP 7 详见前面翻译的一篇文章:Netbeans 8.2将支持PHP 7 编辑器功能增强 文档好像没有明确说明 ...
- JQuery 快速入门
1.要学习Jquery @首先要在需要的页面引入 <script type="text/javascript" src="jquery.js">&l ...
- php中防止SQL注入的方法
[一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...
- json中含有Unicode的处理办法 C#
public static class StringExtension { #region unicode 字符转义 /// <summary> /// 转换输入字符串中的任何转义字符.如 ...
- DDD开发框架ABP之动态Web API层
建立动态Web API 控制器 ASP.NET Boilerplate 能够自动为您的应用层产生Web API层.比如说我们有如下的一个应用服务: public interface ITaskAppS ...
- jQuery演示8种不同的图片遮罩层动画效果
效果预览 下载地址 jQuery插件大全 实例代码 <div class="container"> <h1>jQuery图标和文章动画效果</h1&g ...
- jqGrid使用setColProp方法动态改变列属性
在使用jqGrid插件时,有时我们需要动态改变列的属性,可使用setColProp方法,用法如下 jQuery(”#grid_id”).setColProp('colname',{editoption ...
- jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
上一篇记录了BaiduTemplate模板引擎使用示例附源码,在此基础上对使用方法进行了封装 自定义插件jajaxrefresh.js 代码如下: //闭包限定命名空间 (function ($) { ...