Chcę porównać kąty i poznać odległość między nimi. W przypadku tej aplikacji pracuję w stopniach, ale działałoby to również w radianach i gradach. Problem z kątami polega na tym, że zależą one od arytmetyki modułowej, tj. 0–360 stopni.
Powiedzmy, że jeden kąt wynosi 15 stopni, a drugi 45. Różnica wynosi 30 stopni, a kąt 45 stopni jest większy niż 15 stopni.
Ale to się psuje, gdy masz, powiedzmy, 345 stopni i 30 stopni. Mimo że porównują się prawidłowo, różnica między nimi wynosi 315 stopni zamiast prawidłowych 45 stopni.
Jak mogę to rozwiązać? Mógłbym napisać kod algorytmiczny:
if(angle1 > angle2) delta_theta = 360 - angle2 - angle1;
else delta_theta = angle2 - angle1;
Ale wolałbym rozwiązanie, które unika porównań / gałęzi i opiera się całkowicie na arytmetyki.