0

我遇到了麻烦,我已经搜索和研究过,但我就是想不通。

我正在制作一个太空游戏,并希望让玩家确定飞船的方向并让飞船平稳地进出。所以船的旋转速度会增加然后减少,所以它不会超过它的目标。

我查过 SUVAT 之类的,但我就是搞不定。

我必须使用的价值观是

  • 船的角度
  • 船舶所需的角度
  • 船的转速
  • 船的旋转速度可以增加的速率

因此,如果船处于角度 0 并且想要定向到角度 90,它将增加它的旋转速度,直到角度 45,它会开始降低它的旋转速度,所以当它达到角度 90 时,旋转速度将停止。

我应该注意,旋转速度可以是正数或负数,具体取决于船需要旋转的方式(顺时针/逆时针)

谁能帮我?

4

2 回答 2

0

如果船舶旋转速度可以减少/增加的最大值达到最大值,那么如果玩家在移动目标的同时改变目标,您将无法防止超过玩家设定的目标。但是,您可以做的是确保以这样一种方式调整您当前的速度,以尽可能快地以零速度(即没有超调)达到最终目标。有关解决最优控制问题的一般方法,请参见http://en.wikipedia.org/wiki/Optimal_control 。最佳控制通常包括始终以全推力加速/减速(直到达到目标)。

为解决这个问题,用C表示新命令发出时刻的当前角度,用T表示目标角度。收到新目标时的角速度用V'表示,最大加速度用M表示. 正V对应顺时针旋转,负V对应逆时针移动。

假设你的初始角速度大于 0(V'>0),那么有两种可能达到 T:

1) 将 V 增加一段时间 U,然后将其减小直到为零。然后您的最终角度将是(绘制速度与时间的关系图,并确定要验证的区域):

C+ V'^2/(2 M) + 2U*V' + M U^2

哪个应该等同于 T 以找到 U(ABC 公式),除非它没有给出解决方案(负判别式),其中选项 2)应该给出一个解决方案。

2) 降低 V 一段时间,最终改变 V 的符号,然后增加 V 直到为零。绘制图片给出:

C+ V^2/(2 M) - M U^2. 

等于 T 给出 U。

你会发现它们是一个非常简单的条件,它决定了选项 1) 或 2) 是否给出了解决方案。

初速度 V'<0 的情况类似(1 和 2,可能还有一些符号,翻转)。再次,画一幅画,以防你感到困惑。


这里有一些微妙的东西,因为如果你想在 T',那么 T'+K 360 度(/2 pi 弧度)也可以(前提是你可以全天候)。因此,您实际上可以选择最容易访问的 T的别名。

于 2012-06-17T20:48:28.520 回答
0

船的旋转速度会增加一半时间,而减少另一半时间。您可以先确定中点:half = abs(desiredAngle - startAngle). (绝对值允许这对正值和负值都有效)在开始旋转之前计算它。然后,在你的更新循环中,计算你旋转了多少:currentChange = abs(currentAngle - startAngle);计算旋转速度,rotationSpeed += (currentChange > half) ? -rate : rate;但是,使用这种方法,你可能会稍微低于或超过所需的角度。要解决此问题,请检查您是否在最终角度的某个(小)阈值内,然后将当前角度设置为所需角度,并将旋转速度设置为零。

于 2012-06-17T04:02:06.650 回答