【发布时间】:2011-06-28 19:18:40
【问题描述】:
我有这种方法可以找出 2 0-360 罗盘方向之间的差异。
虽然这可以确定我离我有多远(如始终为正输出),但我无法确定需要做什么才能将符号引入输出。
理想情况下,如果从初始航向到最终航向的最短距离是顺时针方向,我希望error 有一个正号,如果航向之间的最短距离涉及逆时针方向,我希望error 有一个负号。
所需输入/输出的几个示例
initial -- final -- error
0 .................... 30 .... 30
30 .................... 0 .... -30
360 .................... 1 .... 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;
}
【问题讨论】:
标签: c# compass-geolocation 360-degrees