Как правильно сравнивать диапазоны углов?

Даны два сектора: от угла A1 радиан до угла A2 радиан, и от угла B1 рад. до B2 рад.
Надо определить, есть ли у них пересечения.

Как это решить правильно-красиво?

Что-то забуксовал с неопределённостями, когда угол может быть задан и как 7 * PI / 4, и он же как -PI / 4.

иллюстрация
5e6115dbb6fae548066185.png
Заданы углы от оси X к лучам OA, OB, OC и OD.
Интересует, пересекаются ли диапазоны AOB и COD.


Для однозначности можно считать каждый диапазон заданным углом его биссектрисы и полу-шириной.

Как «правильно» нормализовать значения?
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Taus
Одно из решений. Пусть сектор A описывается упорядоченной парой {A1,A2}, т.е. сектором считается область получающаяся при обходе окружности по часовой стрелке от точки А1 до точки А2.
1. Привести значения всех углов к диапазону от [0, 2pi).
2. Если A1 > A2, то разобъём сектор на два: S1 = [A1, 2pi) U [0, A2].
3. С помощью алгебры множеств и алгоритма пересечения обычных отрезков можно найти пересечение:
[A1, A2] ∩ [B1, B2] - обычный алгоритм
( [A1, 2pi) U [0, A2] ) ∩ [B1, B2] = ( [B1, B2] ∩ [A1, 2pi) ) U ( [B1, B2] ∩ [0, A2] ) - для каждого из пересечений обычный алгоритм
( [A1, 2pi) U [0, A2] ) ∩ ( [B1, 2pi) U [0, B2] ) - очевидно, что пересекаются как минимум в точке 0
Ответ написан
@Zolg
Что-то забуксовал с неопределённостями, когда угол может быть задан и как 7 * PI / 4, и он же как -PI / 4
Самый простой способ избежать буксование с неопределенностями - нормализовывать входные значения и дальше работать с чистой арифметикой
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы