2014-12-21 1 views
3

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

Grid Problem

У меня есть точка сетки Размер (х, у)

Объекты размещаются на сетке в месте точки (х, у) с оценками Rectangle (новый размер (ш, ч) , new Point (x, y))

Целью является представление объекта как bool [,], где индекс местоположения массива представляет смещение в границах прямоугольника.

Возможно, я немного подумал об этом, поэтому объясню, что я использовал Rectangle из-за очень удобного IntersectsWith.

Объектам будет разрешено перемещать одну единицу в любом направлении, но им не разрешается перемещаться в местоположение, уже занятое другим объектом.

Я хотел бы торцевое использование быть что-то вроде:

Pattern p1 = new Pattern(Point location1, bool[,] pattern); 
Pattern p2 = new Pattern(Point location2, bool[,] pattern); 

if(p1.Intersects(p2)) 
    throw new ... 

я только заботиться о закономерности перекрывается. Я бы хотел, чтобы общий размер и форма шаблона изменялись.

Я пытаюсь придумать способ переопределить шаблон с определенными правилами, основанными на общей площади.

Я ищу совет, чтобы наилучшим образом подойти к этой проблеме.

+0

Возможно, этот вопрос подходит лучше на http://programmers.stackexchange.com – InferOn

+0

Есть ли у вашей проблемы визуальное представление или вы используете только концепцию Rectangle? – TaW

+1

Итак, если Rectangles пересекаются, то формы ** могут ** пересекаться. Подход Rectangle - это хороший способ быстро определить, нужно ли вам дополнительно проверять. Для окончательного определения вам придется перебирать массивы и посмотреть, установлены ли для одного из одинаковых местоположений значение true. Очевидно, вам нужно явно проверить, чтобы убедиться, что вы не превышаете строки/столбцы другой формы, если два шаблона имеют «ограничивающие прямоугольники» разного размера. –

ответ

1

Вы можете попробовать treemap. Сортируйте прямоугольники и поместите первый в дерево 2d. Разделите дерево по обоим осям и поместите следующий прямоугольник, где он подходит. Промыть и повторить.

0

Я решил пойти с простым списком баллов. Я чувствую, что, возможно, слишком много думал об этом. Каждый объект имеет список точек, метод определения того, является ли недавно добавленная точка соседней существующей точки, и метод определения, принадлежит ли точка объекту.

Это шаблон квази-посредника, корневой объект содержит список многих вспомогательных объектов, под-объекты запрашивают корневой объект для доступности точек, корневой объект запрашивает все вспомогательные объекты.

Это должно, некоторые из них, помогают поддерживать SOLID/SRP.

 Смежные вопросы

  • Нет связанных вопросов^_^