小球自由落体动态模拟(Position Based Simulation)

  在过去的几十年中,基于物理的三维物体动态模拟成为了计算机图形学的研究热点,其中最常见的方法是基于力(force-based)的模拟方法,比如弹簧质点模型http://www.cnblogs.com/shushen/p/5473264.html,它把物体抽象成一系列质点以及连接这些质点的弹簧,然后通过离散化牛顿运动定律来模拟物体的运动情况。最近,基于位置的模拟方法在刚体、弹性体以及流体模拟方面都取得了不错的效果,基于位置(position-based)的模拟方法虽然没有基于力的模拟方法计算准确,但是它计算快速稳定,使其适用于实时交互应用领域。下面将详细介绍基于位置模拟算法的主要原理。

  基于位置的模拟方法将研究物体抽象成N个粒子和M个限制条件的集合,整个算法流程如上图所示。首先初始化每个粒子的位置xi0和速度vi0(第1-3行),然后对于时间步长Δt而言,通过欧拉积分方法得到粒子下一时刻新的位置(第5-6行),新的位置pi并不是下一时刻的最终位置,而是下一时刻的预测位置,接着生成限制条件(第7行),并通过迭代方法不断修正预测位置pi使其满足限制条件(第8-10行),最后利用修正后的预测位置更新下一时刻的最终位置xi和速度vi(第11-14行)。

  假设限制条件:C(x) = 0,一阶泰勒展开得到:,于是位置修正量为:

  一种最简单的限制条件是距离限制,以两个粒子为例,其距离限制函数为:

  那么距离限制函数对各自的位置导数分别为:

其中

  于是可以得到粒子的位置修正量为:

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

参考文献:

[1] Bender, Jan, et al. "A Survey on Position-Based Simulation Methods in Computer Graphics." Computer Graphics Forum 33.6 (2014): 228-251.

时间: 2024-10-28 20:23:01

小球自由落体动态模拟(Position Based Simulation)的相关文章

使用CSS3动画模拟实现小球自由落体效果

使用纯CSS代码模拟实现小球自由落体效果: html代码如下: 1 <div id="ballDiv"> 2 <div id="ball"></div> 3 </div> CSS样式代码: /*ball样式*/ #ballDiv{ height:400px; background-color:#333333;} #ball{ width:100px; height:100px; border-radius:50%; b

EasyX—模拟小球自由落体

1 #include <stdio.h> 2 #include <graphics.h> 3 4 #define SCREEN_WIDTH 640 5 #define SCREEN_HEIGHT 480 6 #define R 20 7 #define T 0.01 8 #define G 9.8 9 #define EPSILON 5E-3 10 11 int main() { 12 initgraph( SCREEN_WIDTH, SCREEN_HEIGHT ); 13 cir

Position Based Dynamics【译】

绝大部分机翻,少部分手动矫正,仅供参考.本人水平有限,如有误翻,概不负责... Position Based Dynamics Abstract The most popular approaches for the simulation of dynamic systems in computer graphics are force based. Internal and external forces are accumulated from which accelerations are

canvas动画:自由落体运动

经过前面的文章,我们已经能够在canvas画布上画出各种炫酷的图形和画面,但是这些画面都是禁止的,怎么样才能让他们动起来呢? 如何绘制基本图形可以参考:canvas基本图形绘制 如何对基本图形移动旋转缩放可以参考:canvas图形变换 如何设置基本图形颜色和样式可以参考:canvas样式和颜色 如何使用外部图片以及图形组合可以参考:canvas使用图片,图形组合以及裁剪 canvas如何保存和加载图像可以参考:canvas图像保存 canvas系列教程可以参考:canvas 动画的基本步骤 我们

【OneAPM】极客编程挑战#023:使用HTML5画布生成渐变自由落体小球效果

本期挑战 给定如下HTML: <canvas id="gbcanvas" width="350" height="300"></canvas> 阅读如下的相关HTML5画布教程: HTML5画布实现的粒子运动效果 HTML5画布Canvas基础入门 请使用HTML5画布生成一个自由落体效果的渐变小球,效果如下(点击下图查看GIF动画) 渐变色由#dd4814开始, 由#FFFF66结束 提交方式: 录制代码编写过程或最终代

ObjectAnimator之PropertyValuesHolder与Keyframe----实现电话响铃震动和小球自由抛体效果

首先需要实现的俩种效果图 1.实现电话响铃震动效果 2.小球自由抛体效果 一.PropertyValuesHolder 1.概述 PropertyValuesHolder这个类的意义就是,它其中保存了动画过程中所需要操作的属性和对应的值.我们通过ofFloat(Object target, String propertyName, float- values)构造的动画,ofFloat()的内部实现其实就是将传进来的参数封装成PropertyValuesHolder实例来保存动画状态.在封装成P

JS运动-自由落体运动

模拟物理中的自由落体运动:废话不多说,先看效果!! 图片效果不太好,有些卡,可以把代码考出来自己运行看下效果!! 基本过程:鼠标可拖拽div,当鼠标抬起的时候,div会自由下落,然后弹起下落,直到速度为0运动停止,下落和弹起直至停止的过程是模拟 自由落体运动 完成测试代码: <div id="box"></div> <style> #box{ position: absolute;left: 0;top: 0; width: 100px;height

洛谷——P1033 自由落体

P1033 自由落体 题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公式为 d=1/2*g*(t^2),其中 g=10,t 为下落时间.地面上的小车以速度 V 前进. 如下图: 小车与所有小球同时开始运动,当小球距小车的距离 <= 0.0001(感谢Silver_N修正) 时,即认为小球被小车接受(小球落到地面后不能被接受). 请你计算出小车能接受到多少个小球. 输入

自由落体和抛物线运动

自由落体是个加速的过程,让速度递加,再给速度个系数,减小速度即可 抛物线是在自由落体的前提下left也会变,速度,速度系数 js函数 //自由落体和抛物线运动 function fallMove(obj) { var speed = 0; var speedX = 10; clearInterval(obj.timer); obj.timer = setInterval(function() { speed += 3; var T = obj.offsetTop + speed; if(T >