У меня есть луч, мне нужно найти ближайший отрезок, в который он попадает. Я думаю, что это можно сделать за время O (log n), если я сначала отсортирую сегменты линии, но я не могу вспомнить, как их сортировать... Я думаю, что лучше всего подойдет какое-то дерево, но как мне сортировать их как по начальной, так и по конечной точке? Я также хотел бы быстрых вставок в эту структуру данных, если это возможно.
Там много кода для одного луча и одного линейного сегмента, но мне нужно что-то для одного луча и многих линейных сегментов... Я не знаю, какие термины искать в Google.
Ссылка на соответствующую статью — это хорошо, код на C++ — еще лучше. Спасибо! :)
PS: сегменты линий на самом деле являются ребрами несамопересекающихся многоугольников, отсортированных по часовой стрелке... но я думаю, что может быть какое-то преимущество в сортировке их другим способом?
Это все 2D.
Если подумать, я не совсем уверен, что это возможно. Может помочь какое-то пространственное разбиение, но иначе я не могу придумать никакого способа отсортировать линии так, чтобы их можно было сравнить с произвольным лучом.