gpt4 book ai didi

java - 如何解决这个具有三个重叠形状的逻辑陈述?

转载 作者:行者123 更新时间:2023-12-01 15:39:00 25 4
gpt4 key购买 nike

我需要在 while(...) 中编写条件,其中所有三个形状都将重叠,然后在 while 循环中使用,尝试找到形状的坐标组合,其中不会与其他形状重叠。我在代码中有 3 个 while 循环 - 每个循环都用于选择特定形状的一对坐标。

此代码卡住程序:

                    xRing = (int) ((getWidth() - ringSize) * (Math.random()));
yRing = (int) ((getHeight() - ringSize) * (Math.random()));
while( !(

(xSquare + squareSize) < (xRing)
|| (xSquare) > (xRing + ringSize )
|| (ySquare + squareSize) < (yRing)
|| (ySquare) > (yRing + ringSize)
)

||

!(

(xSquare2 + square2Size) < (xRing)
|| (xSquare2) > (xRing + ringSize )
|| (ySquare2 + square2Size) < (yRing)
|| (ySquare2) > (yRing + ringSize)
)

||

!(

(xSquare + squareSize) < (xSquare2)
|| (xSquare) > (ySquare2 + square2Size )
|| (ySquare + squareSize) < (ySquare2)
|| (ySquare) > (ySquare2 + square2Size)
)

){
xRing = (int) ((getWidth() - ringSize) * (Math.random()));
yRing = (int) ((getHeight() - ringSize) * (Math.random()));


}

这可以工作,但允许重叠 Square 和 Square2:

        while( !( 

(xSquare + squareSize) < (xRing)
|| (xSquare) > (xRing + ringSize )
|| (ySquare + squareSize) < (yRing)
|| (ySquare) > (yRing + ringSize)
)

||

!(

(xSquare2 + square2Size) < (xRing)
|| (xSquare2) > (xRing + ringSize )
|| (ySquare2 + square2Size) < (yRing)
|| (ySquare2) > (yRing + ringSize)
)

据我了解,我必须检查每对是否重叠,有 3 种形状,3 种可能的重叠。正如我之前在代码逻辑中提到的,我可以检查两对的重叠。当我添加第三个条件检查时,它无法退出。在我看来,所有逻辑都完全正确。如果我的循环找到第一个坐标,其中三个形状不可能重叠,它将退出。

实际上我的简短版本的代码应该如下所示:

while( not(ring NOT overlaps square 1) or 
not(ring NOT overlaps square 2) or
not(square 1 NOT overlaps square 2) ) {
...
}

已解决:在绘制每个形状时,我应该检查 2 个组合(而不是 3 个),因此对于每个 while() 我必须有不同的条件。

最佳答案

您基本上是在检查矩形中的随机位置,如果所有位置都包含在至少两个形状中(假设您的条件正确,我没有检查),您的循环将不会退出。

最好循环遍历矩形中的所有像素并检查它们。这样,您的循环将在检查完所有像素后停止。

至于你的条件:我没有彻底检查它,但由于你使用了很多 or 条件,我假设至少有一个外部条件为真,因此循环不会停止。

我假设您的 3 个顶级条件应如下所示:

while( not(ring overlaps square 1) or 
not(ring overlaps square 2) or
not(square 1 overlaps square 2) ) {
...
}

例如,如果方格 1 和方格 2 不重叠,则条件将始终为真,并且循环将永远运行。

关于java - 如何解决这个具有三个重叠形状的逻辑陈述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8389039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com