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

В самом начале мы с другим аноном это уже написали немного иначе. Но верно сказано: Мф. 7:6

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

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

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

Тред не читал, но да, нужно.

Впрочем, при заданных ограничениях можно выбирать полюс по многоугольнику — например, натянуть выпуклую оболочку на вершины (в евклидовом пространстве, не на сфере) и взять центр масс множества вершин. Далее в качестве полюса выбрать не принадлежащую сферическому многоугольнику точку в пересечении аффинного подпространства коразмерности два, содержащего в себе центр масс и начало евклидовых координат с сферой.

(Если не следовать когомологичному стилю постов в начале треда — взять прямую, проходящую через центр масс и начало координат, она будет пересекать сферу в двух точках, в качестве полюса взять ту, что не принадлежит многоугольнику)

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

Зарубежный же... Там у автора тупая фамилия ещё, не могу вспомнить никак. Короткая, не более 6-7 букв, и не менее четырёх. :(

П.С. По твоему ты скинул ссылки на фундаментальные труды что ли? Жесть.

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

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

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

Отпишу если вспомню, особо не расчитывай, я скорее просто забью. Есть другие дела. Удачи тебе в поисках себя.

anonymous
()
Ответ на: комментарий от anonymous

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

Нет, это был первый попавшийся торрент с пачкой неновых учебников.

question4 ★★★★★
() автор топика

используй стереографическую проекцию сферы на плоскость.

«прямая» на сфере это дуга большой окружности. окружности со сферы отображаются в окружности на плоскости. таким образом твой многоугольник со сферы отобразится в многоугольник из дуг окружностей на плоскости

https://ru.wikipedia.org/wiki/Стереографическая_проекция

и еще смотри видеофильмы

http://www.dimensions-math.org/

anto215 ★★
()
Последнее исправление: anto215 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.