угол по часовой стрелке между двумя линиями

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


person VOX    schedule 05.07.2010    source источник


Ответы (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.

person paxdiablo    schedule 05.07.2010

Я бы попробовал :

if degrees is between [-360, 360]
    degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;
person andrea    schedule 31.03.2011

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

положительное с плавающей точкой = (угол ‹0)? (360 + угол): угол

person Shirik    schedule 05.07.2010