2012-01-14 66 views
1

这是我旋转ATAN2 CCW CW连续性

  • 我在2D X平面,Y
  • 我通过点击屏幕上的X设定了目的地 'Y'
  • 我想这需要转身面对这个目的与角度:
// Calculate the angle between plane position and destination point 

CVector3 facingVec = m_vDestination - m_vPosition; 
fAngle = -Math::radiansToDegrees ( (float)atan2f(m_vDestination.x - m_vPosition.x, m_vDestination.y - m_vPosition.y) ) ; 

//This doesn't work, when rotating from ex. 350 degree to 0 
//plane has to go all the way around 360,350,340,330, 
//...,120,...100,90,..down to zero 
float angleToTurn = fAngle - m_fRotationAngle; 
if(angleToTurn < 0) 
{ 
    angleToTurn += 360.0f; 
} 

m_fRotationAngle += (angleToTurn)/5; 

// Move the unit towards the calculated angle m_fRotationAngle 

m_vDirection.x = (-sin(Math::degreesToRadians(m_fRotationAngle))); 
m_vDirection.y = (cos(Math::degreesToRadians(m_fRotationAngle))); 

m_vPosition += (2 * m_vDirection * fDelta); 

这是怎么看起来像

YT Video - 遗憾的演示版,我无法获得自由在这一刻什么。

这就是我需要

  • 我需要这个正确的行为,比方说飞机在角度350 旋转,我设定的目标和新的角度应在15

而不是去的:350,340,330,320,310,300,290,... 10,0,15 应该继续:350,0,15

希望你能帮助我和这些家伙在一起,我已经放弃了贝塞尔的方法 - 而且我几天以来一直在努力解决这个问题。

+0

试图观看视频时你说的“这个视频是私人的”。请公开。 – 2012-01-14 09:33:20

+0

已更新,对不起。 – PeeS 2012-01-14 09:34:59

+0

坐标系可能在视频中旋转吗?在我看来,当光标在平面下时出现问题。当m_vDestination.y - m_vPosition.y == 0分开时,你应该处理这种情况,因为atan2f会有问题 – 2012-01-14 09:40:07

回答

1

如果我正确读到这个,你试图找到两个向量之间插入的最小角度?如果是这样,则应使用以下算法:

  1. 找到第一个向量相对于固定向量[1,0]的角度。这是a1。
  2. 找到第二个向量相对于固定向量[1,0]的角度。这是a2。
  3. 让da = a2-a1。
  4. 如果da> 180,da = 360;
  5. else if if < 180,da + = 360;

您需要计算相对于另一个第三个向量[1,0]的角度,以便您可以确定向左或向右旋转的天气。

编辑:我看到您的YouTube链接已损坏,现在我发现它再次运行。我想我的答案就是你想要的。

+0

我已经用类似的方法解决了问题。感谢Liam - 干得好! – PeeS 2012-01-14 09:45:13

+0

不用担心!这是一个简单的问题,但我认为我们都在一个或另一个阶段处理这个问题。 – 2012-01-14 09:46:20

+0

啧啧,有时我觉得我应该起诉我的数学老师;-) 可爱的东西,我有这个做伴侣,我现在可以继续这个东西:)有一个伟大的周末利亚姆:) – PeeS 2012-01-14 09:53:34