У меня есть этот метод для определения разницы между 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;
}