我正在尝试计算两个角度之间的最小差异。
这是我当前的代码(与我在网上找到的代码略有不同):
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);
除了在圆边缘的情况外,它工作得很好。例如,如果当前角度为 355,目标角度为 5,则计算出的差值为 -350,而不是 10,因为 365 度等于 5 度。
关于我可以做些什么来完成这项工作有什么想法吗?
你基本上已经有了。只需取 diff 模数 360,然后检查是否大于 180:
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);
Edit:@Andrew Russell 在对您的问题的评论中提出了一个很好的观点,下面的解决方案利用了 MathHelper.WrapAngle 方法,正如他所建议的:
diff = Math.Abs(MathHelper.WrapAngle(a2 - a1));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)