两个角度之间的最小差异?

twe*_*ypi 8 c# math xna

我正在尝试计算两个角度之间的最小差异.

这是我目前的代码(我在网上发现的一些细微变化):

float a1 = MathHelper.ToDegrees(Rot);
float a2 = MathHelper.ToDegrees(m_fTargetRot);

float dif = (float)(Math.Abs(a1 - a2);

if (dif > 180)
  dif = 360 - dif;

dif = MathHelper.ToRadians(dif);
Run Code Online (Sandbox Code Playgroud)

除了在圆边的情况下,它工作正常.例如,如果当前角度为355且目标角度为5,则计算差值为-350而不是10,因为365度等于5度.

关于我能做些什么才能使这项工作的任何想法?

Pre*_*aul 8

你基本上拥有它.在检查是否大于180之前,只需采用dif modulus 360:

float a1 = MathHelper.ToDegrees(Rot);
float a2 = MathHelper.ToDegrees(m_fTargetRot);

float dif = (float)Math.Abs(a1 - a2) % 360;

if (dif > 180)
    dif = 360 - dif;

dif = MathHelper.ToRadians(dif);
Run Code Online (Sandbox Code Playgroud)

编辑: @Andrew Russell在评论你的问题时提出了一个很好的观点,下面的解决方案充分利用了他建议的MathHelper.WrapAngle方法:

diff = Math.Abs(MathHelper.WrapAngle(a2 - a1));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`MathHelper.WrapAngle`以弧度为单位,因此如果使用它,请不要进行度转换.(实际上它绝不是必要的:2π弧度= 360度.不要忘记我们的朋友`MathHelper.TwoPi`!) (2认同)