Javascript 平滑旋转到一个角度

Javascript 平滑旋转到一个角度,javascript,c++,algorithm,lua,rotation,Javascript,C++,Algorithm,Lua,Rotation,我正在以160度/秒的速度旋转一个物体,并让它以预先指定的角度完全停止。例如,如果选择的角度是30度,它会旋转得很快,然后减速,最终在30度处停止。我很难想出这样做的算法,这就是我所要求的 目前,假设设置旋转所需的全部操作是object.rotation=30(度)。可以用Java/Lua/C++/JavaScript编写 到目前为止我所拥有的(基本上没有): //假设wait(1)等待1秒 内倾角=70//一开始旋转速度很快,但随着时间的推移速度会变慢 for(inti=140;i>0.1;i

我正在以160度/秒的速度旋转一个物体,并让它以预先指定的角度完全停止。例如,如果选择的角度是30度,它会旋转得很快,然后减速,最终在30度处停止。我很难想出这样做的算法,这就是我所要求的

目前,假设设置旋转所需的全部操作是object.rotation=30(度)。可以用Java/Lua/C++/JavaScript编写

到目前为止我所拥有的(基本上没有):

//假设wait(1)等待1秒
内倾角=70//一开始旋转速度很快,但随着时间的推移速度会变慢
for(inti=140;i>0.1;i=i-5)//必须适用于每个角度
{
对于(int a=0;a
伪代码:

int max_speed = 10
int target_angle = 30

while (target_angle != object.Rotation) do
  int delta = target_angle - object.Rotation
  delta = max(min(delta / 5, max_speed), -max_speed) + max(min(delta, 1), -1)
  object.Rotation = object.Rotation + delta
  wait(.05)
end while

看看Ogre3D库,特别是它对四元数和SLERP的使用。你想做的不是小事。
int max_speed = 10
int target_angle = 30

while (target_angle != object.Rotation) do
  int delta = target_angle - object.Rotation
  delta = max(min(delta / 5, max_speed), -max_speed) + max(min(delta, 1), -1)
  object.Rotation = object.Rotation + delta
  wait(.05)
end while