我有这种方法可以找出 2 0-360 罗盘方向之间的差异。
尽管这可以确定我离我有多远(如始终为正输出),但我无法确定需要做什么才能将符号引入输出。
理想情况下,如果从初始航向到最终航向的最短距离是顺时针方向,我希望error
有一个正号,如果航向之间的最短距离涉及逆时针方向,我希望error
有一个负号。
所需输入/输出的一些示例
initial
-- final
--error
0 .................... 30 .... 30
30 .................... 0 .... -30
360 ……………………………………1
1 .................... 360 .... -1
代码:
/// <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;
}