Есть ли способ обезопасить себя и просто справиться с переносом углов с минимальным количеством операторов случая.
Перенос угла происходит при использовании определенного представления угла (либо 0–360 градусов, либо -180–180 градусов (или эквивалента в радианах)) и переноса угла . Например, предположим, что у вас есть угол -170, и вы вычитаете 50 градусов. Математически вы получаете -220, но на самом деле должно быть +140 градусов.
Очевидно, вы можете проверить это, используя:
Код: Выделить всё
if (deg < -180) { 180 - abs(deg + 180); }
The second case where this is prevalent is in the interpolation between two angles.
For Example, say I have an angle of -170 deg and 160 deg and I want halfway in between them. A common way to do this is
Код: Выделить всё
ang1 + 0.5(ang2-ang1)Is there a common way to handle angle wrap in these scenarios?
Источник: https://stackoverflow.com/questions/114 ... -in-c-code
Мобильная версия