如何模拟摆动摆?


9

我想模拟一根带有重物的绳索,像钟摆一样来回摆动。任何实际的物理学都是矫kill过正。只是不断地重复相同的动作。

jQuery具有与我正在寻找的类似的“摇摆”缓解。它是如何工作的?

我本来是想用来从一个角度旋转到另一个角度Math.easeOutExpo,但是真正的摆锤的摆放方式却有所不同...


2
使正弦曲线进入摆的角速度,以使零点位于峰值处,而最高速度值位于底部。
Shot弹枪忍者

Answers:


10

好吧,您将不得不使用一些物理原理,但是您无需模拟任何物理原理。您可以轻松地使用摆式运动公式来设置摆的旋转角度。对于小摆幅,可以用简单的谐波运动来近似运动

特定时间的角位移可近似为:

在此处输入图片说明

对于较小的最大θ,这是最准确的,但对于您的目的来说可能足够准确。创建一个使用当前时间的函数,并输出您的摆锤应旋转的角度,然后将精灵旋转该量。


4

这是一个非触发计算,是从11年级Trig and Physics直接得出的。假定原点是摆锤悬架的最低点,L是摆锤的长度,并且采用y向下递增而x向右递增的常规图形约定:

更新:我最初弄乱了yAcceleration;这比较容易。
更新#2:添加了明确的时间控制,并添加了度量单位。

const float gravity = 9.8;     // units of metres/sec/sec
const float deltaT  = 0.001;   // equals 0.001 sec or 1 millisecond

var xVelocity = 0.010;         // units metres/sec equals 10 cm/sec 
var x = 0.0;                   // units metres
var y = 0.0;                   // units metres

while (true) {
  var xAcceleration = -gravity * (x/L) * (L-y)/L;

  x += (xVelocity + (xAcceleration/2 * deltaT)) * deltaT;
  y  = Math.SQRT(L*L - x*x) - L; 

  xVelocity += xAcceleration * deltaT;
}

2
等式中缺少时间。
Maik Semder

@MaikSemder:时间单位定义为动画周期,无论是什么时间。为什么会有其他方式呢?
Pieter Geerkens

现在,您的加速度积分使用1单位的隐式时间。如果您的游戏时间单位是秒,那么您每秒只能有1个模拟帧,只需明确地插入时间,就可以解决该问题。时间已经在那儿了,只要明确一点即可。例如,帧时间是变化的,但是您需要与帧时间无关的稳定,恒定的动画速度(在不同平台之间),或者您希望有平滑效果,这有很多原因。
Maik Semder

1
这就是我的观点,g来自外部或“游戏”。现在您有了时间单位。现在的Delta t是该时间单位的1。对于实时仿真而言,这并不是很方便,因为您的游戏具有自己的经过时间“想法”。将其设为显式参数而不是隐式常量可以使答案对游戏有用。
Maik Semder

2
尼斯:)速度必须与“DeltaT的”相乘为好,为了获得“置换”出来的速度,因此它可以被添加到“X”,upvoted
MAIK Semder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.