我正在尝试计算两个角度之间的最小差异.
这是我目前的代码(我在网上发现的一些细微变化):
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度.
关于我能做些什么才能使这项工作的任何想法?
你基本上拥有它.在检查是否大于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)