Каким математическим способом можно определить угол по двум заданным истинным пеленгам?

Учитывая, что у меня есть два истинных пеленга: начальный пеленг 315 градусов и конечный пеленг 45 градусов, есть ли лучший способ определить угол между двумя истинными пеленгами? Сложность возникает, когда начальный подшипник больше конечного. У меня есть следующее, что работает, но я полагаю, что есть лучший/математический способ.

double tStartBearing = 315;
double tEndBearing = 45;
double tAngle;

if (tStartBearing > tEndBearing) {
   tAngle = tStartBearing - tEndBearing - 180;
} else {
   tAngle = tEndBearing - tStartBearing;
}

Ожидайте, что результирующее значение tAngle будет равно 90. Рассмотрим начальный пеленг 0 и конечный пеленг 359,9, результирующее значение tAngle должно быть 359,9, а не 0,1.


person Absent Link    schedule 19.05.2020    source источник


Ответы (1)


Угол (со знаком) всегда равен end - start. Предполагая, что начальный и конечный углы находятся в одном и том же диапазоне [n, n + 360), их разница будет между (-360, 360).

Чтобы нормализовать разницу к положительному углу в диапазоне [0, 360), используйте:

tAngle = (tEndBearing - tStartBearing + 360) % 360;

Вместо этого, чтобы нормализовать разницу до угла со знаком в диапазоне [-180, 180), используйте:

tAngle = (tEndBearing - tStartBearing + 360 + 180) % 360 - 180;

Вышеприведенное работает независимо от того, меньше ли начальный угол, чем конечный, или наоборот.

person dxiv    schedule 19.05.2020
comment
Большое спасибо! - person Absent Link; 20.05.2020