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

  弹簧质点模型的隐式表达方式如下:

(1)

(2)

其中:qnvn分别代表tn时刻质点的位置和速度,f(qn)为tn时刻质点所受到的力,M为质点的质量,h为步长。

  利用式(1)我们可以得到:

(3)

(4)

  将式(3)减式(4)并与式(2)结合得到:

(5)

  记x = qn+1y = 2qnqn-1,式(5)可以变化为:

(6)

  式(6)的解其实对应于如下函数的临界点:

(7)

  于是弹簧质点模型问题可以变化为最优化问题minx g(x),即最小化函数g(x)。

  函数E(x)中最重要的部分是弹簧势能,根据Hooke定律,可以推导得到两个质点间弹簧的势能为:

(8)

其中:k为弹簧的弹性系数,r为弹簧的自然长度。

  因此弹簧质点模型中弹簧的整体势能也可以变化为最优化问题,即最小化如下函数:

(9)

其中:L = A·K·ATJ = 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)附源码的更多相关文章

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

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

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

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

  3. 网格弹簧质点系统模拟(Spring-Mass System by Euler Integration)

    弹簧质点模型是利用牛顿运动定律来模拟物体变形的方法.如下图所示,该模型是一个由m×n个虚拟质点组成的网格,质点之间用无质量的.自然长度不为零的弹簧连接.其连接关系有以下三种: 1.连接质点[i, j] ...

  4. Spring AOP实现方式三【附源码】

    注解AOP实现 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Administrator ...

  5. Spring AOP实现方式二【附源码】

    自动代理模式[和我们说的方式一 配置 和 测试调用不一样哦~~~]  纯POJO切面 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /* ...

  6. Spring AOP实现方式一【附源码】

    基本代理模式  纯POJO切面 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Admin ...

  7. 快速开发架构Spring Boot 从入门到精通 附源码

    导读 篇幅较长,干货十足,阅读需花费点时间.珍惜原创,转载请注明出处,谢谢! Spring Boot基础 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计 ...

  8. Java Web开发框架Spring+Hibernate整合效果介绍(附源码)

    最近花了一些时间整合了一个SpringMVC+springAOP+spring security+Hibernate的一套框架,之前只专注于.NET的软件架构设计,并没有接触过Java EE,好在有经 ...

  9. Java Web开发框架Spring+Hibernate整合效果介绍(附源码)(已过期,有更好的)

    最近花了一些时间整合了一个SpringMVC+springAOP+spring security+Hibernate的一套框架,之前只专注于.NET的软件架构设计,并没有接触过Java EE,好在有经 ...

随机推荐

  1. jQuery省市区三级联动插件

    体验效果:http://hovertree.com/texiao/bootstrap/4/支持PC和手机移动端. 手机扫描二维码体验效果: 代码如下: <!DOCTYPE html> &l ...

  2. 装饰模式 - Decorator 和 外观模式 - Facade

    装饰模式 Decorator,不改变接口但动态给对象加入责任,所需功能按顺序串联起来控制,比生成子类灵活. 外观模式 Facade,让接口更简单.为子系统中的一组接口提供一个一致的界面. 参考:

  3. 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

    [源码下载] 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox 作者:webabcd ...

  4. B/S结构的流程简单概述

    在介绍appl ication 对象之前,先简单介绍一些Web 服务器的实现原理.         对于大部分浏览器而言,它通常负责完成三件事情: (1)向远程服务器发送请求. (2)读取远程服务器返 ...

  5. 简单介绍JSON

    如下图:

  6. bootstrap无限级分类 jq拓展 之前的无限级分类的封装版~

    git地址:https://github.com/zhangjiahao93/jQ.select HTML部分 <!DOCTYPE html> <html> <head ...

  7. 参加了iDOF2016会议,发表演讲“油田SOA与云平台的系统思考与实践”

    PPT的全部抓图,扫描二维码直接到微信里去看吧:

  8. 【Swift】iOS开发历险记(二)

    前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯 ...

  9. fragment 监听返回

    @Override public void onResume() { super.onResume(); getView().setFocusableInTouchMode(true); getVie ...

  10. 解决idea中执行maven命令失败的问题

    1.问题描述 如上图所示,在使用idea 里的maven命令执行项目打包时,有时候会报如下一个错误. -Dmaven.multiModuleProjectDirectory system proper ...