我试图编写一个简单的弹簧质量系统模拟,在这个模拟中,一个球悬在顶部的字符串(弹簧)上,然后另一个球(由用户控制)可以移动并与这个悬挂球进行交互(碰撞)。
我已经编写了弹簧部分的动力学模拟,但我不知道足够的添加刚体动力学。我想要一个解释或一个来源,以了解如何算法做这个模拟。
发布于 2019-02-21 04:23:46
刚体模拟与点质量情况非常相似,只是我们必须处理旋转运动(方向和角动量)。
除了质量、位置和线速度等常见的粒子属性外,我们还需要存储初始转动惯量\mathbf{\hat{I}}、当前角动量\mathbf{L}^n和电流取向\mathbf{R}^n。如果您使用的是数据驱动的粒子系统,那么这个步骤就像声明几个新属性一样简单。
随着质量的收缩,当前时间步长\mathbf{I}^n的转动惯量取决于电流取向\mathbf{R}^n:\mathbf{I}^n=\mathbf{R}^n \mathbf{\hat{I}} (\mathbf{R}^n)^T。
刚体的运动与直线运动类似:
其中\omega是角速度,\omega^*是交叉积矩阵。
对于动力学,我们也有一个类似的牛顿的“f=ma”版本:
其中\tau是扭矩。
因为刚性球体之间会有相互作用,所以你也需要实现球体的碰撞检测。
现在我们已经知道了刚体的运动学和动力学。剩下的唯一的事情就是如何求解(积分)上述方程。朴素的前向欧拉可能不能给出稳定的结果。关于这个主题的一个很好的介绍可以在Witkin和Baraff SIGGRAPH课程上找到,这里还有一个更多的Bargteil和Shinar最近的SIGGRAPH课程。
https://computergraphics.stackexchange.com/questions/6402
复制相似问题