2012-06-17 203 views
0

我遇到了麻烦,我搜索和研究,但我无法弄清楚这一点。使对象顺利旋转和平滑

我正在做一个太空游戏,并希望让玩家定位船并使船顺利旋转& out。所以船的旋转速度会增加然后下降,所以它不会超过它的目标。

我抬头看了SUVAT和排序,但我不能放弃它。

我有工作的值是

  • 船的角度
  • 船舶的需要的角度
  • 船的旋转速度
  • 率船的转速可以提高

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

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

谁能帮助我?

+0

您是否在谈论关于任意轴的3D平面内旋转或旋转?你是什​​么意思“顺利旋转进出”?你的意思是开始和停止轮换顺利吗? – andand

+0

这是一款2D游戏。我的意思是,这艘船可以每秒旋转10度,但它不会以每秒10度的速度开始,但会慢慢加速。 (减速,所以它会立即停止) – YAS

回答

0

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

+0

我想过这个,但是如果玩家在船旋转时改变角度会怎样。这种方法仍然有效吗? – YAS

+0

你是说如果玩家改变目标角度?然后你将不得不重新计算'half',具有相同的开始角度,但是新的'desiredAngle'。不过,该方法仍然可以工作。 – wquist

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增加到0。画图给出:

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

等同于T得到U.

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

初速度V'< 0类似(1和2,也许有些符号翻转)的情况。再次画一张照片,以免你感到困惑。


有一些微妙的东西在这里,因为如果你想在T“则T” + K 360度(/ 2 PI弧度)也将做(只要你能充分去全天候) 。所以你实际上可以选择选择别名的T最容易去。

+0

为了改善屏幕上显示的方式,您可以考虑在V本身上设置最大值。数学变得更加复杂一些,但仍然可以管理。 – willem