Я не знаю, есть ли стандартный способ сделать это, но это происходит со мной, что вершинами ограничивающего многоугольника будут углы прямоугольников и точки, где их стороны пересекаются, и исключая те, которые лежат внутри прямоугольника.
Чтобы заказать очки, начните с одной точки в наборе. Это либо пересечение двух ребер, либо угол, поэтому в любом случае гарантируется, что он будет по крайней мере на двух краях. Просто двигайтесь по одному из краев, пока не дойдете до следующей точки. Поскольку мы уже удалили внутренние точки, мы всегда будем ударять по другой вершине, прежде чем мы закончим внутри.
Если угол одного прямоугольника расположен вдоль края другого, вы должны быть осторожны, потому что один путь от угла приведет к внутреннему пространству прямоугольника. Таким образом, существует некоторый элемент выбора правильного края для прослеживания. Но если вы сохраняете список пунктов, которые вы исключили из-за того, что они были в интерьере, вы знаете, что переход к исключенной точке - неправильное направление.
Редактировать Позвольте мне попытаться выразить это более подробно.
(1) Начните с каждой стороны каждого прямоугольника. Вычислите, где они пересекаются и разбивают края.
(2) Теперь у вас есть список сегментов. Проверьте конечные точки каждого сегмента, чтобы увидеть, находятся ли они внутри любого из прямоугольников.
(3) Теперь возьмите любую из внешних конечных точек, которая является конечной точкой хотя бы одного сегмента, который имеет другой внешний конечный пункт. Нарисуйте линию от конечной точки до другой внешней конечной точки.
(4) Эта внешняя оконечная точка также должна быть конечной точкой другого сегмента, который имеет другую внешнюю конечную точку. Нарисуйте линию на эту внешнюю конечную точку.
(5) Повторяйте, пока не вернетесь к конечной точке, с которой вы начали.
** Пересечение ** прямоугольников? Или ** объединение прямоугольников? Ограничивающим многоугольником будет объединение. Тем не менее, по какой-то причине вы говорите о пересечении. BTW, ваши прямоугольники изотетические? – AnT
@AndreyT Yup, я имел в виду союз - просто немой мозговой пердит. И прямоугольники (и, следовательно, объединение) будут изотетическими. – starwed