Есть точка на сфере, заданная угловыми координатами 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 для сферы? Или есть что-то, умеющее работать с географическими координатами?
Заранее спасибо.