Пересечение треугольника и треугольника(окружности) на шаре

Имеются два треугольника. Требуется определить факт их пересечения. Треугольники заданы широтой и долготой.
Можно использовать алгоритмы из 2D геометрии. Одно НО - если хоть одна из фигу содержит в себе полюс, то алгоритмы 2D не подходят.
Вроде на форуме присутствуют люди, которые пишут скрипты для заливки данных в OSM и иногда в таких сообщениях упоминаются операции над полигонами.
Может они уже решали такую проблему и могут подсказать хотя бы куда копать?

P.S. Смотрел в сторону сферической геометрии треугольников, но там таких алгоритмов нет. :frowning:

Не знаю насчёт стандартных методов.

А так на первый взгляд всё так же, как и для обычных треугольников, только вместо отрезков - ортодромии :slight_smile:
Из-за нелинейности вроде никаких эффектов не возникает

(рассуждение вслух)
Для начала можно решить задачу про пересечение двух отрезков на сфере и воспользоваться этим для решения исходной задачи…

А где внутренность у треугольника на сфере? Пока он маленький, вроде интуитивно понятно, а когда он вырастет? Например одна точка в австралии, одна в США, а третья в Москве. Это уже совсем не похоже на треугольник.
А теперь еще веселее. Возьмем три точки, расположенные на экваторе. Такой треугольник существует? Где у него внутренность, а где наружная строна. А если он не существует (точки на одной линии), то возьмем точки, расположенные на окружности, расположенной под углом 30 градусов к экватору. Они уже могут не оказаться на одной “прямой”.

А если треугольники неболшьшие, то я бы вращал сферу так, чтобы полюс никогда не попадал внутрь треугольника.

Alexey Guseynov привел пример правильный. Точнее тот, что дает кривой результат. Т.е. если взять треугольник, точки которого расположены на одной широте, то на 2D карте это будет выглядеть как обычная прямая. И при таком раскладе обычные методы из 2D геометрии не применимы.
С вращением понятно, но при этом вращать нужно оба треугольника и при вращении может получится, что второй треугольник сместился на полюс.

В общем - ответ ясен. Если никто не знает, то спец-методов нет. Буду использовать свои придумки. :slight_smile:

“Нутрь” там, где меньше углы, это вроде как очевидно.
На вырожденный случай (большой круг) можно и забить.

Не будет - ортодромия в проекции не выглядит прямой.

Тут есть много хороших формул: http://williams.best.vwh.net/avform.htm
Можно что-нибудь приспособить к данной задаче…

Это если полностью проецировать. Я же беру упрошеный вариант - три точки проецируем на карту и соединяем прямыми линиями

to Sergey Astakhov
Спасибо за формулы, можут найду что хорошее.

Shasoft, а зачем их прямыми-то соединять?
Прямые тут заведомо не годятся, кроме разве что очень маленьких объектов

Для простоты. Точнее для упрощения и повышения скорости расчета.

Shasoft, а не секрет, что это за треугольники и зачем их соединять прямыми?

Нет. Не секрет. Делаю (или по крайней мере пытаюсь сделать) 3D карту на основе OSM данных.
Треугольник - это тайл поверхности. Второй треугольник - это пирамида(frustum) камеры, спроецированной на поверхность планеты. Данный алгоритм требуется для определения: видим ли данный тайл на экране и нужно ли его выводить или стоит скрыть для. Т.е. отсечение невидимых тайлов.

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

Ну тогда ортодромии действительно не нужны :slight_smile:
Но не нужно и пересечение треугольников, список тайлов лучше по-другому получать.
Кстати, а зачем они треугольные??

А из квадратных шарик плохо складывается…

Поделить сферу на прямоугольники весьма проблематично, поэтому треугольные.
А зачем получать список тайлов? Вершины тайла уже изместны, их получать не нужно. Нужно определить: попадает ли тайл в камеру.

Ну не знаю, в GE явно трапециями сделано, и вроде особых недостатков у этого нет.

А если надо попадание в камеру, не лучше ли к прямоугольным координатам перейти?

Проблема трапеций в том, что одна сторона её больше, другая меньше + на полюсах трапеция вырождается в треугольник. Т.е. получается, что нужно будет отслеживать: трапеция на полюсе или нет. Изначально я тоже начал с трапеций, но после долгих раздумий и анализа пришел к выводу, что тайл в виде треугольника - более оптимально.
А что значит к прямоугольным координатам? Не совсеи понял.

А зачем ‘обслуживать’ полюса? Сделайте проверку и ‘не пускайте’ туда пользователя :slight_smile:
А посмотреть потом можно будет?
UPD: надо хакнуть GE, что бы ходил за тайлами к нам :slight_smile: и посмотреть, что получится.
(Скрестить sas и ge, это будет песня).