Точка пересечения Луча-Полигона на поверхности сферы

StackOverflow https://stackoverflow.com/questions/628335

Вопрос

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

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

Это было полезно?

Решение 4

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

Вопрос 1.E GodeGuru

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top