我遇到了麻烦,我已经进行了搜索和研究,但我无法理解这一点。
我正在制作一个太空游戏,并希望让玩家定位船舶并使船舶平稳地旋转。出。所以船的旋转速度会增加然后减少,所以它不会过度射击它的目标。
我查了SUVAT和那种,但我无法解决它。
我必须使用的值是
因此,如果船舶处于角度0并且想要定向到角度90,则会增加它的旋转速度,直到角度45开始减小旋转速度,因此当它达到角度90时旋转速度将停止
我应该注意旋转速度可以是正的还是负的,这取决于船需要旋转的方向(顺时针/逆时针)
任何人都可以帮助我吗?
答案 0 :(得分:0)
船的转速会增加一半的时间,而减少另一半的时间。
您可以先确定中途点:half = abs(desiredAngle - startAngle)
。 (绝对值允许此值适用于正值和负值)在开始旋转之前计算此值。然后,在您的更新循环中,计算您旋转了多少:currentChange = abs(currentAngle - startAngle);
要计算旋转速度,rotationSpeed += (currentChange > half) ? -rate : rate;
但是,使用此方法,您可能略微低于或高于拍摄所需的角度。要解决此问题,请检查您是否在最终角度的特定(小)阈值内,然后将当前角度设置为所需角度,并将旋转速度设置为零。
答案 1 :(得分: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的别名。