我有这个方法来计算 2 个 0-360 罗盘方向之间的差异。
尽管这可以计算出我的绝对偏差(例如,始终为正输出)有多远,但我无法弄清楚需要做什么才能将符号引入到输出中。
理想情况下,如果从初始航向到最终航向的最短距离是顺时针旋转,我希望error
为了有一个正号,如果标题之间的最短距离涉及逆时针旋转,我想要error
有负号。
所需输入/输出的一些示例
initial
-- final
-- error
0 ...................... 30 ................. 30
30 ...................... 0 ................. -30
第360章 1..1
1 ...................... 360 ............ -1
Code:
/// <summary>
/// Calculate the error from a given initial heading to a final heading
/// </summary>
/// <param name="inital"></param>
/// <param name="final"></param>
/// <returns></returns>
private double GetHeadingError(double initial, double final)
{
double directionA = final - initial;
double directionB = 360 - (final + initial);
double error = 0;
if (Math.Abs(directionA) < Math.Abs(directionB))
{
error = directionA;
}
else
{
error = directionB;
}
return error;
}
Edit:添加了检查差异何时恰好为 180 度的功能。以前,根据最终值是大于还是小于初始值,返回 180 或 -180。我对其进行了修改,使其在两种情况下都返回正 180。
所以这是我的尝试......
private static double GetHeadingError(double initial, double final)
{
if (initial > 360 || initial < 0 || final > 360 || final < 0)
{
//throw some error
}
var diff = final - initial;
var absDiff = Math.Abs(diff);
if (absDiff <= 180)
{
//Edit 1:27pm
return absDiff == 180 ? absDiff : diff;
}
else if (final > initial)
{
return absDiff - 360;
}
else
{
return 360 - absDiff;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)