LINUX.ORG.RU

Принадлежит ли точка многоугольнику на сфере?

 , аналитическая геометрия


0

3

Есть точка на сфере, заданная угловыми координатами 0 <= X < 360 и -90 <= Y <= +90. Есть треугольник или выпуклый четырёхугольник без самопересечений в тех же координатах. Требуется узнать, лежит ли точка внутри его границ.

Поправка: разности координат вершин многоугольника существенно меньше 180 градусов.

Для 3-угольника на плоскости нашёл формулы:

(x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0)
(x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0)
(x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0)
(x0,y0 — проверяемая точка, 1,2,3 — вершины треугольника). Если принадлежит, все 3 выражения имеют один знак.

Вопрос 1: Правильно ли я понимаю, что для 4-угольника нужно просто посчитать:

(x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0)
(x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0)
(x3 - x0) * (y4 - y3) - (x4 - x3) * (y3 - y0)
(x4 - x0) * (y1 - y4) - (x1 - x4) * (y4 - y0)
и убедиться, что у всех совпадает знак?

Вопрос 2: Что делать, если сторона пересекает «меридиан» X=0? Достаточно ли проверять, превышают ли разности X по модулю 180, и если да, прибавлять/вычитать 360? Можно ли как-то загнать число в интервал (-180; 180) через деление на 360 с остатком?

Вопрос 3: Как нужно обрабатывать точки X=0 Y=±90?

Вопрос 4: Есть ли готовая библиотека для Питона, чтобы это считать? Если на плоскости годится numpy.cross( p1 - p0, p2 - p1 ), как учесть пункты 2 и 3 для сферы? Или есть что-то, умеющее работать с географическими координатами?

Заранее спасибо.

★★★★★

Последнее исправление: question4 (всего исправлений: 4)
Ответ на: комментарий от peregrine

Я этим занимаюсь для своего удовольствия. Сферические координаты проходил на 1 курсе. Давно.

question4 ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Третий скорее всего, либо второй, если какая-то спец шарага. Но, судя по тому, как он подбирает литературу для чтения... Это дно, товарищи.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.