2010-07-05 7 views
3

Я хочу вычислить угол по часовой стрелке между двумя отрезками A и B. Таким образом, полученный угол должен быть между 0 и 360-1 градусами. Я видел все другие ответы в SO, но они дали мне отрицательные углы. Благодарю.по часовой стрелке между двумя линиями

ответ

2

Для поворота любого угла в 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.

1

Конечно, вы могли бы адаптировать любое решение с отрицательными углами, чтобы всегда быть 0-360 путем регулировки:

поплавка положительного = (угол < 0)? (360 + угол): угол

2

Я хотел бы попробовать:

if degrees is between [-360, 360] 
    degrees = (degrees + 360) % 360; 
else degrees = (degrees % 360) + 360) % 360; 
Смежные вопросы