旋转Atan2 CCW CW连续性

时间:2012-01-14 08:53:58

标签: c++ ios math

这就是我所拥有的

  • 我有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

希望你能帮助我和这些家伙一起帮助我,我已经放弃了更好的方法 - 而且我现在几天都在努力解决这个问题。

1 个答案:

答案 0 :(得分:1)

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

  1. 找到第一个向量相对于固定向量[1,0]的角度。这是a1。
  2. 找到第二个向量相对于固定向量[1,0]的角度。这是a2。
  3. 设da = a2 - a1。
  4. 如果da&gt; 180,da - = 360;
  5. 如果da&lt; 180,da + = 360;
  6. 您需要计算相对于另一个第三个矢量[1,0]的角度,以便您可以确定向左或向右旋转的天气。

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