Java 简易分离转向

Java 简易分离转向,java,Java,我有一个java应用程序,它创建了150个随机矩形,具有随机的宽度、高度、X坐标和Y坐标 大多数都是重叠的,这是我的问题。我想把所有的矩形分开,但我不知道我要做什么。 在这里,您可以看到RECT的屏幕截图: 所有RECT都存储在ArrayList中(专用ArrayList dungeonCells;) DungeonCell类类似于带有以下字段的向量: public int positionX; public int positionY; public int width; public i

我有一个java应用程序,它创建了150个随机矩形,具有随机的宽度、高度、X坐标和Y坐标

大多数都是重叠的,这是我的问题。我想把所有的矩形分开,但我不知道我要做什么。 在这里,您可以看到RECT的屏幕截图:

所有RECT都存储在ArrayList中(
专用ArrayList dungeonCells;
) DungeonCell类类似于带有以下字段的向量:

public int positionX;
public int positionY;

public int width;
public int height;

我希望你能理解我的问题。

不要毫无顾虑地添加三角形,先检查它是否合适。如果没有,请跳过它并创建另一个。这可以通过
do while
实现

Rectangle r;
do
{
   r = createRandomRect();
} while (overlaps(r))
add(r);

注意:如果矩形的数量不断增加,可用空间越来越小,这将非常缓慢。还要确保矩形没有占据整个区域。如果使用了所有的空间,该算法可能会失败,但这不太可能,因为我认为您使用的是浮点数。

如果您想避免生成重叠的随机矩形,可以这样做:

  • 为下一个矩形生成值
  • 检查新矩形的任何角是否位于任何现有矩形内
  • 然后添加矩形或生成新的随机值
  • 不要忘记通过设置最大尝试次数来避免无限循环
如果需要检查两个矩形是否相交,则需要编写如下内容:

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;
}
public静态布尔相交(矩形rect1,矩形rect2)
{
如果(rect1.positionX>=rect2.positionX&&
rect1.positionY>=rect2.positionY&&
rect1.positionX=rect2.positionY

&&rect1.positionX+rect1.height你的任务是什么?把所有的矩形分成几组,这样在一组中就只有重叠的矩形?或者其他的意思?矩形是与轴对齐的还是也有旋转?如果第一个是,那么问题很小,我不会给你提示,如果第二个不是很好格:分离轴定理。或者你想生成矩形,这样就不会有重叠的矩形?我想移动所有的矩形,使它们不会相互重叠。在这种情况下,你可以使用其中一个响应的建议:只需逐个生成矩形。如果一个新的矩形与以前的矩形相交如果有,就重新生成它。随着矩形数量的增加,这将表现出相当糟糕的时间复杂性…@OliCharlesworth:我知道。我会将它添加到我的答案中。@OliCharlesworth不太可能,如果
重叠
方法只查询附近的矩形。@Leri:查询是一回事(可以用四叉树或其他方法解决)。但这也是重试比率。@OliCharlesworth是的,你是对的。另外,矩形容器的边界定义与否也很重要。问题肯定太宽了。你的重叠检查逻辑被破坏了。如果你有两个正方形在彼此内部呢?如果Thomas Flynn想允许矩形在矩形内部,你有一个观点。从variab我猜他只想要相邻的矩形。