Как нарисовать контур группы из нескольких прямоугольников?

StackOverflow https://stackoverflow.com//questions/24040796

Вопрос

Мне нужно нарисовать охватывающий многоугольник группу прямоугольников, расположенных рядом друг с другом.

Давайте подумаем о текстовых полях, которые имеют общий хотя бы один край (или его часть) хотя бы с одним из других прямоугольников.Я могу получить координаты точек прямоугольников, и поэтому у меня есть все необходимые данные о них.

Можете ли вы придумать простой алгоритм/процедуру рисования многоугольника (соединенных прямых путей) вокруг этих объектов.

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

All different cases

Я читал здесь о выпуклой оболочке и тому подобном, но на самом деле это выглядит гораздо более простой проблемой.Одно (начало) решение, о котором я подумал, заключалось в том, что точки, которые мне действительно нужно нарисовать, - это только те точки, которые не являются общими ни для одной пары прямоугольников, то есть точки, которые являются вершинами более чем одного прямоугольника, являются избыточными.Чего я не смог выяснить, так это порядка, в котором мне нужно рисовать линии от одной к другой.

В настоящее время я работаю над целью c, но буду признателен за любой другой язык или алгоритм, включая псевдо.

Спасибо!

Это было полезно?

Решение

ИМХО, это должно быть так.Сделайте список оборовни и посмотреть, если некоторые наложены: это должно быть просто, если прямоугольники выровнены с осью X, Y.Вы просто найдете края, которые имеют вершины на том же x или y, а другие координаты должны быть между.После этого оставшиеся края должны образовывать контур.

Другой способ найти общие края - это нарушать все прямоугольники вдоль каждого оси x и y, где у вас есть вершины.Это должно выглядеть так, как будто вы расти все линии до бесконечности.После этого все общие края будут иметь общие вершины и могут быть устранены.

Другие советы

У вас есть две строки и три разных y-ценности.Скажем так y0 это самое главное, y2 это нижний конец, и y1 отмечает середину между обоими рядами.
Каждая строка имеет максимальное и минимальное значение x, скажем, верхняя строка начинается с x0_min к x0_max, а нижняя строка из x2_min к x2_max.Учитывая эти значения, вы просто рисуете вокруг этой вещи:

(x0_min,y0)->
(x0_max,y0)->
(x0_max,y1)->
(x2_max,y1)->
(x2_max,y2)->
(x2_min,y2)->
(x2_min,y1)->
(x0_min,y1)->
(x0_min,y0)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top