我有一个java应用程序,可以创建150个随机宽度,高度,X和Y坐标的随机矩形。
大多数都是重叠的,这是我的问题。我想分开所有的矩形,但我不知道自己该做什么。 在这里,您可以看到rects的截图:
所有rects都存储在ArrayList(private ArrayList<DungeonCell> dungeonCells;
)中
DungeonCell-Class类似于带有以下字段的向量:
public int positionX;
public int positionY;
public int width;
public int height;
我希望你能理解我的问题。
答案 0 :(得分:3)
不要毫无顾虑地添加三角形,而是首先检查它是否合适。如果没有,请跳过它并创建另一个。这可以使用do-while
。
Rectangle r;
do
{
r = createRandomRect();
} while (overlaps(r))
add(r);
注意:如果矩形数量不断增加且可用空间越来越小,这将会非常缓慢。还要确保矩形不占据整个区域。如果确实使用了所有空间,这个算法可能会失败,但这不太可能,因为我认为你使用浮点数。
答案 1 :(得分:1)
如果您想避免生成重叠的随机矩形,您可以这样做:
答案 2 :(得分:0)
如果您需要检查两个矩形是否相互交叉,则需要编写如下内容:
public static boolean Intersects(Rectangle rect1, Rectangle rect2)
{
if (rect1.positionX >= rect2.positionX &&
rect1.positionY>=rect2.positionY &&
rect1.positionX <= rect2.positionX+rect2.height &&
rect1.positionY <= rect2.positionY + rect2.width
|| rect1.positionX+rect1.height >= rect2.positionX
&& rect1.positionY+rect1.width>=rect2.positionY
&& rect1.positionX+rect1.height <= rect2.positionX+rect2.height
&& rect1.positionY+rect1.width <= rect2.positionY + rect2.width)
return true;
else return false;
}