如何在Rectangle的区域内表示模式

时间:2014-12-21 18:28:20

标签: c# arrays rectangles

目标是拥有一个表示布尔值的2D集合的对象。

Grid Problem

我有一个大小为(x,y)的点网格

对象放置在点(x,y)位置的网格上,边界为Rectangle(新的大小(w,h),新的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 ...

我只关心模式重叠。我希望模式的一般大小和形状是可变的。

我正试图想出一种基于总面积的某些规则来重新定义模式的方法。

我正在寻找有关解决此问题的最佳方法的建议。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用树形图。对矩形进行排序,并将第一个放入2d树中。  在两个轴上拆分树,并将下一个矩形放在适合的位置。冲洗并重复。

答案 1 :(得分:0)

我决定使用一个简单的Points列表。我觉得我可能已经过度思考了。每个对象都有一个点列表,一个确定新添加的点是否是现有点的邻居的方法,以及一种确定一个点是否归该对象所有的方法。

这是一个准中介模式,根对象包含许多子对象的列表,子对象查询根对象的可用点,根对象查询所有子对象。

这应该,有些什么,有助于维护SOLID / SRP。