Есть задача:
Дана полигональная сфера, где четко определена связь полигонов(общие вершины), сфера с одной стороны деформирована (вдавлена). Так же дан контур, спроецированный на поверхность деформированной сферы, как показано на рисунке, координаты его проекций на каждый полигон известны. И имеются 2 произвольные точки, например,
,
(показаны на рисунке). Требуется определить лежат ли эти точки внутри заданного контура.
Как я начал ее решать. Для определения находится ли точка внутри контура использовал классический алгоритм
Задача о принадлежности точки многоугольнику (учёт числа пересечений). Для этого соответственно производил переход из
в
пространство, т.е. сделал развертку исходной фигуры на плоскость. При этом положение каждого полигона в
определяется только правилами построения развертки и, в общем случае, не обязательно делать классическую развертку, а можно просто "разбить" сферу, т.е. считать, что каждый полигон находится в произвольном месте плоскости(единственное условие, что "нормали смотрят вверх", т.е. лицевые стороны полигонов смотрят на нас). Так на рисунке ниже приведена схема 2-х смежных полигонов, серой линией показаны связи по общим точкам, красной показано, что линия замкнутого контура переходит с одного полигона на другой. Сначала я строю отрезок из точки
в произвольном направлении, получаем отрезок
в системе координат, построенной на базисе
. Определяю пересечение отрезка
с
. Далее надо оценить этот же отрезок относительно второго полигона (на рисунке "2") и его сегмента
. Просто оценить не выйдет, т.к. в текущей момент имеется разрыв контура на сегменты
и
.
Я делаю так:
- считаю, что базис первого полигона и второго построенные по смежной стороне
(
) одинаковы, а система координат имеет ноль в точке
(
), загвоздка только в том, что полигоны разбросаны на плоскости (но связи остались и мы можем найти смежные полигоны для данного);
- определяю координаты
в СК, построенной на базисе
(начинаю как и говорил с первого полигона)
- поскольку, считаю, что системы координат, построенные на базисах
и
"совпадают" (т.к. полигоны смежные изначально по
), т.е. можем полученные координаты отрезка
для СК на базисе
считать равными координатам в СК на
, а потом найдя матрицу перехода из из базиса
в
получить координаты
.
- далее просто оцениваем пересечения
и
- делаю аналогично для всех полигонов
Вопросы:
1. может есть другой способ решения подобной задачи (возможно, выше я написал , мягко говоря, не лучшее решение), буду благодарен за указание верного направления в решение подобной задачи
2. если взять спущенный футбольный мяч (с вмятиной как на представленной модели), сшитый из пентагонов (есть информация о связи смежных пентагонов), его разворачиваем в
, т.е. "расшиваем" где надо. Далее в
ставим точку внутри одного из пентагонов и из нее пускаем луч в произвольном направлении, когда луч пересекает границу исходного пентагона, он должен переходить в другой (как если бы мы пускали луч по поверхности сферы) и возвращаемся в исходную точку, естественно, он проходит и по "впуклости" мяча надо. Как используя
СК и информацию по связи смежных пентагонов построить такой луч, проходящий через множество пентагонов.