Я хочу рассчитать угол по часовой стрелке между двумя отрезками линии A и B. Таким образом, результирующий угол должен составлять от 0 до 360–1 градус. Я видел все другие ответы в SO, но они дали мне отрицательные углы. Спасибо.
угол по часовой стрелке между двумя линиями
Ответы (3)
Для преобразования любого угла в диапазон от 0 до 359 в C # вы можете использовать следующий «алгоритм»:
public int Normalise (int degrees) {
int retval = degrees % 360;
if (retval < 0)
retval += 360;
return retval;
}
C # следует тем же правилам, что и C и C ++, и i % 360
предоставит вам значение от -359
до 359
для любого целого числа, тогда вторая строка должна гарантировать, что оно находится в диапазоне от 0 до 359 включительно.
Подлая версия на одной строчке:
degrees = ((degrees % 360) + 360) % 360;
что нормализует его при любых условиях. Не уверен, что я бы слишком беспокоился об использовании встроенного однострочника, если производительность не была критичной, но я объясню это.
От degrees % 360
вы получите число от -359
до 359
. Добавление 360
изменит диапазон от 1
до 729
. Затем последний % 360
вернет его в диапазон от 0
до 359
.
Я бы попробовал :
if degrees is between [-360, 360]
degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;
Конечно, вы можете адаптировать любое решение с отрицательными углами, чтобы они всегда были 0-360, изменив:
положительное с плавающей точкой = (угол ‹0)? (360 + угол): угол