Вы можете действовать следующим образом:
сначала добавьте к вашему набору точек все точки пересечения ваших полигонов.
тогда я буду действовать как алгоритм сканирования Грэма , но с еще одним ограничением.
Вместо того, чтобы выбирать точку с наивысшим углом относительно предыдущей линии (посмотрите на сканирование Грэма, чтобы понять, что я имею в виду (*)), выберите точку с наибольшим углом, которая была частью одного из предыдущих многоугольников. .
вы получите конверт (не выпуклый), который будет описывать вашу форму.
Примечание:
это похоже на нахождение выпуклой оболочки ваших точек.
Например, алгоритм сканирования Грэма поможет вам найти выпуклую оболочку множества точек в O (N * ln (N)), где N - количество точек.
ищите алгоритмы выпуклой оболочки, и вы можете найти некоторые идеи.
Надеюсь, это поможет.
: * Замечания 1030 *
(*) из Википедии:
Первый шаг в этом алгоритме - найти точку с наименьшим
у-координаты. Если самая низкая координата Y существует более чем в одной точке
в наборе, точка с самой низкой координатой х из
кандидаты должны быть выбраны. Назовите эту точку P. Этот шаг занимает O (n),
где n - количество рассматриваемых точек.
Далее набор точек должен быть отсортирован в порядке возрастания
угол они и точка P составляют с осью х. Любой универсальный
Для этого подходит алгоритм сортировки, например, heapsort (который
является O (n log n)). Для того, чтобы ускорить расчеты, это не
необходимо рассчитать фактический угол, который эти точки составляют с
ось х; вместо этого достаточно рассчитать косинус этого угла:
является монотонно убывающей функцией в рассматриваемой области
(что составляет от 0 до 180 градусов, из-за первого шага) и может быть
рассчитывается с простой арифметикой.
В алгоритме выпуклой оболочки вы выбрали точку угла, который составляет наибольший угол с предыдущей стороной.
Чтобы "придерживаться" своего предыдущего многоугольника, просто добавьте ограничение, которое вы должны выбрать сторону, которая существовала ранее.
и вы снимаете ограничение на угол менее 180 °
надеюсь, мне ясно