У меня есть прямоугольная плоскость целочисленного размера. Внутри этой плоскости у меня есть набор непересекающихся прямоугольников (целочисленного размера и целых координат).Инвертирование набора прямоугольников на 2D-плоскости
Мой вопрос в том, как я могу эффективно найти инверсию этого набора; то есть части плоскости, которые не содержатся в суб-прямоугольнике. Естественно, этот набор точек образует набор прямоугольников --- и именно они меня интересуют.
Мое текущее наивное решение использует булевую матрицу (размер плоскости) и работает, установив точка i, j в 0, если она содержится в под-прямоугольнике и 1 в противном случае. Затем я перебираю каждый элемент матрицы и, если он 1 (свободный), пытается «вырастить» прямоугольник наружу от точки. Уникальность не вызывает беспокойства (любой подходящий набор прямоугольников в порядке).
Существуют ли какие-либо алгоритмы, которые могут решить эту проблему более эффективно? (Т. Е. Без необходимости прибегать к булевой матрице.
Осуществление [здесь] (http://stackoverflow.com/questions/4239675/inverting-a-set-of-rectangles- on-a-2d-plane/4240134 # 4240134) – Eric
@ Eric: cool - Я еще не пробовал ваш код, но приятно видеть (возможно, рабочую) реализацию. У меня уже есть код C для этого, но, к сожалению, это часть проприетарного проекта, поэтому я не могу поделиться им. –