Точка пересечения Луча-Полигона на поверхности сферы - PullRequest
4 голосов
/ 10 марта 2009

У меня есть точка (широта / долгота) и курс в градусах (истинный север), по которому эта точка движется. У меня есть множество стационарных многоугольников (точек, определенных в широте / долготе), которые могут быть или не быть выпуклыми.

Мой вопрос заключается в том, как рассчитать ближайшую точку пересечения, если она есть, с многоугольником. Я видел несколько запутанных постов о трассировке лучей, но, похоже, все они относятся к 3D, когда луч и полигон не находятся на одной плоскости, а полигоны должны быть выпуклыми.

Ответы [ 4 ]

1 голос
/ 10 марта 2009

В 2D вычисления довольно просты ...

Вы всегда можете начать с проверки, чтобы убедиться, что конечная точка луча не находится внутри многоугольника (поскольку в этом случае это точка пересечения).

Если конечная точка находится за пределами линии, вы можете выполнить пересечение отрезка луча / линии с каждым из граничных объектов многоугольника и использовать ближайший найденный участок. Это обрабатывает выпуклые / вогнутые элементы и т. Д.

1 голос
/ 10 марта 2009

Вычисляет, пересекает ли луч каждый сегмент линии в многоугольнике , используя эту технику .

Результирующий масштабный коэффициент в (моем принятом) ответе (который я назвал h): "Как далеко вдоль луча находится пересечение" Вы ищете значение от 0 до 1.

Если есть несколько точек пересечения, это нормально! Если вы хотите «первый», используйте тот, который имеет наименьшее значение h.

1 голос
/ 10 марта 2009

звучит так, как будто вы сможете сделать простое пересечение 2-й линии ...

Однако я уже работал с Lat / Long и знаю, что они не совсем верны для любой 2D-системы координат.

Я бы начал с общей функции "IsPointInPolygon", вы можете найти миллион из них путем поиска в Google, а затем протестировать ее на вашем поли, чтобы увидеть, насколько хорошо она работает. Если они достаточно точны, просто используйте это. Но возможно, что из-за неквадратной природы координат широта / долгота вам, возможно, придется внести некоторые изменения, используя сферическую геометрию.

0 голосов
/ 14 марта 2009

Ответ на этой странице представляется наиболее точным.

Вопрос 1.E GodeGuru

...