Как я могу определить, полностью ли один прямоугольник содержится внутри другого?

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

grid layout

Но все, с чем мне нужно работать, это набор прямоугольников objects:

var shapes = new List<Rectangle>();
shapes.Add(new Rectangle(10, 10, 580, 380));
shapes.Add(new Rectangle(15, 20, 555, 100));
shapes.Add(new Rectangle(35, 50, 40, 75));
// ...

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

Конечный результат должен позволить мне преобразовать такую ​​структуру в XML, что-то вроде:

<grid>
  <shape rectangle="10, 10, 580, 380">
    <shape rectangle="5, 10, 555, 100">
      <shape rectangle="20, 30, 40, 75"/>
    </shape>
  </shape>
  <shape rectangle="etc..."/>
</grid>

Но в основном я хочу эту DOM-подобную структуру в памяти, выходной XML - это просто пример того, как я может использовать такую ​​структуру.

Я зациклился на том, как эффективно определять, какие прямоугольники каким принадлежат.

ПРИМЕЧАНИЕ Никакие прямоугольники частично не содержатся внутри другого, они всегда полностью внутри другого.

РЕДАКТИРОВАТЬ Обычно будут сотни прямоугольников, стоит ли мне просто перебирать каждый прямоугольник, чтобы увидеть, содержится ли он в другом?

РЕДАКТИРОВАТЬ Кто-то предложил «Содержит» (не мой лучший момент, упустил это!) ), но я не уверен, как лучше построить DOM. Например, возьмем внука первого прямоугольника, родитель действительно содержит внука, но он не должен быть прямым потомком, он должен быть потомком первого ребенка родителя.

7
задан Matt Brindley 24 November 2010 в 19:22
поделиться