Как определить, попадает ли значение в определенный диапазон углов на окружности? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь выбрать случайные цвета из определенного диапазона на цветовом круге HSL.Как лучше всего определить, попадает ли угловое значение в угловой диапазон на окружности, когда этот диапазон пересекает точку 360/0 на окружности?

Например, если мне нужно было выбрать случайное значениемежду 355 и 5 градусами.Таким образом, 1 было бы приемлемым значением в этом примере, а 180 - нет.

Есть ли более простой способ сделать это, кроме проверки, находится ли значение между 355-360 и 0-5?

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Нормализовать все углы до диапазона [0°, 360°).Если допустимый сектор находится в диапазоне от a до b против часовой стрелки, а c - это угол, подлежащий проверке, то условие равно

(a < b and a < c < b) or (a > b and b < c < a)
0 голосов
/ 13 февраля 2019

Вы можете сдвинуть его назад на смещение (в вашем случае 355 градусов), а затем взять модуль по 360 и сравнить с диапазоном (в вашем случае 10 градусов)

((x - 355) % 360) < 10

Однако некоторые языки дают отрицательные ответыпо модулю отрицательного числа, поэтому может быть более надежным смещаться вверх, а не вниз (и остерегаться отрицательного x)

((x+5) % 360) < 10 
0 голосов
/ 13 февраля 2019

В этом конкретном случае проще проверить if angle <=5 or angle >= 355

В общем случае проверить, находится ли угол a в диапазоне со средним значением m и половинным углом h (диапазон m-h..m+h), для учета периодичности и т. Д. Можно использовать выражение

if cos(a - m) > cos(h)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...