У меня есть набор прямых L и набор точек P. Я хочу найти, сколько прямых L пересекается горизонтальной линией, проходящей через точку p. Как я могу это вычислить?
Алгоритм сканирования для поиска пересечений между линиями
Ответы (1)
Предполагая, что ваш набор сегментов линии хранится в виде (start, stop)
пар и несколько пересечений учитываются несколько раз, этот ответ применим.
Первый шаг - отбросить все x
координаты - имеют значение только y
координаты. Затем создайте массив пар из L и P. Для каждого сегмента линии в L добавьте (y_start, START)
и (y_stop, STOP)
в массив. Для каждой точки в P добавьте (y, POINT)
в массив (START, STOP, POINT
- это просто произвольные значения, например, перечисление C). Отсортируйте массив пар по первому значению.
Затем инициализируйте n = 0, l = 0
, пройдитесь по массиву и посмотрите на второе значение каждой пары:
- Если это
START
, увеличьтеl
. - Если это
STOP
, уменьшитеl
. - Если это
POINT
, добавьтеl
кn
.
n
- ваш окончательный результат. В общей сложности преобладает сортировка O((|L| + |P|) log(|L| + |P|))
.
person
orlp
schedule
04.02.2021
L
, если они сегменты? Как пары точек (начало / конец)? - person orlp   schedule 04.02.2021