У меня есть теоретическая сетка перекрывающихся прямоугольников, которая может выглядеть примерно так:
Но все, с чем мне нужно работать, это набор объектов Rectangle:
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.Например, возьмем внука первого прямоугольника, родитель действительно содержит внука, но он не должен быть прямым потомком, он должен быть дочерним по отношению к первому потомку родителя.