用于模拟由于摩擦和重力引起的旋转球体减速的公式的简单代码示例?

时间:2010-10-14 04:30:23

标签: delphi rotation simulation physics

我有一个旋转球体,用户通过施加虚拟力来旋转,就像虚拟加速器一样。我希望能够模拟出良好的动量效果,这样当它们抬起加速器时,球会以自然逼真的方式向下蜿蜒,仿佛由于摩擦和/或重力。我不想进入任何深度物理方程。我想快点这样做,如果我能找到一个代码示例来说明如何做到这一点,或者甚至一页公式足够清楚我可以编码,那就太好了。

我想要一个具有一个或两个可调系数的公式,我可以根据我的需要调整以使球减速更快或更慢。我不想像开源物理库那样沉重。简单的事情。

我正在使用Delphi 6 Pro,但我也熟悉C / C ++,Basic,Java和Javascript。

4 个答案:

答案 0 :(得分:3)

速度是位移的变化。加速度是速度的变化。

重力或摩擦只会导致加速(可能是负的)。

所以你需要做的就是在没有激活加速器的情况下应用负加速度。

所以我们假设你有一个正在改变的角度。应用加速器会增加每次迭代或时间步长角度变化的量。如果您的角度为t且角度变化称为dt(角速度),则应用加速器时您将拥有:

t = t + dt
dt = dt + a

其中a取决于你申请了多少force,或者他们“按下”了多少加速器(即这是加速度)。

你可能想要限制dt(即旋转速度) - 如果你只想在一个方向旋转,你将有一个正上限和下限为0.如果你想要两个方向,你可以具有较低的负限制和较高的正限制。

您需要做的就是在未应用加速器时使a为负数(如果dt为正数,则a为正dt为肯定),并确保不要'换行'(即当它接近0时使dt为0)。

答案 1 :(得分:2)

只要你没有解决恒星问题,我就不会看到引力与旋转减速有多大关系。

摩擦力几乎与当前的旋转速度成正比(实际上是球体表面的速度)。

因此,当前转速随时间w(t)的公式可能是这样的:

w(t) = w0*exp(-c*(t - t0))

t0是摩擦开始的时间,wt是那时的转速。 系数c> 0确定速度降低的速度 - c越高,速度越低。此公式适用于所有t> = t0。

注意,对于t = t0,exp函数返回1并且您获得初始速度,而对于t - >; ∞exp函数(以及结果速度)返回 - > 0(c前面的减号保证了这一点)。

答案 2 :(得分:2)

已经有一段时间了,但根据我的动力学研究书籍,球体的惯性质量矩被定义为I =(2/5)m * r ^ 2。 m是质量,r是球体的半径(全部在SI中)。在this page上,您将找到一些示例,使用质量惯性矩来计算由于施加负扭矩而导致的球体减速度。这个toqrue是摩擦的结果。由于你没有定义球体表面和周围环境的材料,你无法计算摩擦力,必须自己选择好的力量。

答案 3 :(得分:1)

你已经接受了答案,但我会把它放进去。

我假设您已经知道如何使球体以恒定速率旋转,以及如何使其在施加的扭矩下加速。让它黯然失色只是应用另一个必须计算的扭矩。

当物体在固体表面上滑动时,减速率是恒定的。力量与运动方向相反,其大小取决于几个但速度。当物体完全停止时,力消失。这同样适用于打开固定枢轴的地球仪。

当物体通过流体时,减速力随着速度增加,因此物体越快阻力越大。随着物体减速,减速度变弱,物体继续减速但从未停止。这描述了在空气或水中旋转的地球仪。在相当高的速度下,阻力与v 2 成正比,并且在非常低的速度下它与v成比例(我不知道这些域之间的过渡)。

所以我建议 t = -a w b ,其中 w 是角速度。参数 a 是摩擦强度, b 描述了减速的种类; b = 0就像固体枢轴上的摩擦力一样, b = 2就像在空气中旋转一样, b = 1就像在糖浆中旋转。 b 的其他值可能看起来也可能看起来不现实或 现实。