Разница (XOR) между двумя прямоугольниками в виде прямоугольников?

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

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

Вы также можете думать об этом как об областях экрана, которые должны обновляться при перемещении / изменении размера сплошного прямоугольника.

Примеры: Удвоение ширины прямоугольника «a» - я хочу добавить область (R).

+----+----+
| a  | R  |
|    |    |
+----+----+                   

Пересекающиеся прямоугольники (a и b) - мне нужна область, заданная T, L, R и B в прямоугольниках (возможно другое разбиение), но исключая X:

+------------+  a
|      T     |
|·····+------+-----+  b
|  L  | X    |  R  |
|     |      |     |
+-----+------+·····|
      |    B       |
      +------------+

Я бы предпочел питона решение / библиотека, но будет полезен любой надежный алгоритм.

6
задан jdm 28 February 2011 в 16:24
поделиться