我需要在五个角度中的一个上使一个轮子掉落,我希望它在达到角度时摇摆不定。在用户旋转滚轮之后,我通过将旋转速度乘以每个刻度0.98来减速。我有点工作,找到最接近的角度,并在速度方向上加一个小值。然而,这看起来不切实际,可能会出现问题。
我正在考虑实施阻尼正弦波,但我不确定如何做到这一点。
当前伪代码:
var rotation, rotationVelocity, stoppingPoints[5];
update(deltaT) {
velocity -= rotationVelocity * 0.5 * dt;
closestAngle = findClosestAngle().angle;
rotationVelocity += (closestAngle - rotation) / 36 * dt;
rotation += rotationVelocity;
}
编辑:
跷跷板:不稳定地移动或平衡;来回摇摆:答案 0 :(得分:3)
每次迭代从它的速度中减去一个恒定的量,直到它达到零
这不仅实际上代表了摩擦在现实生活中的作用,而且也更容易。
如果你希望它像连接到弹簧那样移动:
霍克的弹簧定律是F = -kx
,其中k
是一个常数,x是距离原点的距离,如果你想让它来回摇摆,就像它在弹簧上一样。跟踪它从原点的旋转,并添加-kx
x
,其中{{1}}是它与原点的旋转距离(或角度)。
现在,如果你将摩擦力和霍克定律同时应用于弹簧,它应该看起来很逼真。
答案 1 :(得分:1)
我认为你想要的最接近的角度是它停止的地方。您可以模拟它将结束的位置,结束所需的时间,并使用它来确定您需要多少(或更少)速度。
确切地说,你的意思并不确定。
答案 2 :(得分:0)
听起来你想要在stoppingPoints
处附加重量的车轮建模。我的意思是,从物理学的角度来看。存在现有的旋转速度,然后是来自摩擦的减速,以及由重力对这些点的影响引起的未知加速/减速(根据重量的位置转换为旋转速度)。无论如何,这是我的解释,可能是我的方法(模拟引力)。
我认为,当重量引起的加速度超过现有的旋转速度时,你所说的摇摇欲坠。