2

我需要让一个轮子落在五个角度中的一个上,我希望它在达到这个角度时摇摆不定。用户转动轮子后,我通过将旋转速度乘以每滴答声 0.98 来减慢速度。我通过找到最接近的角度并将其方向上的一个小值添加到速度来让它工作。然而,这看起来不切实际,并且可能会出现故障。

我正在考虑实现一个阻尼正弦波,但我不确定我会如何做到这一点。

当前伪代码:

var rotation, rotationVelocity, stoppingPoints[5];
update(deltaT) {
    velocity -= rotationVelocity * 0.5 * dt;
    closestAngle = findClosestAngle().angle;
    rotationVelocity += (closestAngle - rotation) / 36 * dt;
    rotation += rotationVelocity; 
}

编辑:

摇摆不定:移动或平衡不稳;前后摇摆:

4

3 回答 3

3

每次迭代从它的速度中减去一个常数,直到它达到零

这不仅实际上代表了摩擦在现实生活中的运作方式,而且也更容易。


如果您希望它像连接到弹簧一样移动:

胡克的弹簧定律F = -kxk常数,如果你想让它像在弹簧上一样来回摆动,x 是到原点的距离。跟踪它从原点的旋转,并添加它从原点的旋转距离(或角度)在 -kx哪里。x

现在,如果您将摩擦力和胡克定律应用于弹簧,它应该看起来很逼真。

于 2012-11-12T22:16:44.367 回答
1

我认为您想要的最接近的角度是最接近它将停止的位置。您可以模拟它将在哪里结束,结束需要多长时间,并使用它来确定您需要多少额外(或更少)的速度。

不知道你说的摇摇晃晃到底是什么意思。

于 2012-11-12T22:20:48.390 回答
0

听起来您想为一个带有重物的轮子建模stoppingPoints。我的意思是,从物理学的角度来看。存在现有的旋转速度,然后是摩擦减速,以及由重力对这些点的影响引起的未知加速/减速(根据重物的位置转换为旋转速度)。无论如何,这是我的解释,并且可能是我的方法(模拟重力)。

我认为当重量引起的加速度超过现有的旋转速度时,就会实现你所说的摇摆不定。

于 2012-11-12T22:22:07.943 回答