угол по часовой стрелке между двумя линиями - PullRequest
3 голосов
/ 05 июля 2010

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

Ответы [ 3 ]

2 голосов
/ 05 июля 2010

Чтобы превратить любой угол в диапазон 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.

2 голосов
/ 31 марта 2011

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

if degrees is between [-360, 360]
    degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;
1 голос
/ 05 июля 2010

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

float Positive = (angle <0)?(360 + угол): угол </p>

...