我有一个名为Rectangle的类,它由两对整数组成,用于表示矩形左上角和右下角的XY坐标。我还有一个名为Quadrant的类,它由正方形区域(分别为leftX,midX和rightX)上的最左侧,中间和最右侧点的X值组成,并且还包含顶部,中间和底部的类似值。 Y平面(botY,midY,topY)。我想确定给定的矩形是否接触给定象限的x或y平面的中间部分。现在这是我的代码:
boolean isIntersect(Rectangle rect, Quadrant node)
{
boolean xOver = false;
boolean yOver = false;
if((rect.bottomRight.x >=node.midX && rect.topLeft.x <= node.midX) ||
(rect.bottomRight.x <=node.midX && rect.topLeft.x >= node.midX))
{
xOver = true;
}
if((rect.bottomRight.y <= node.midY && rect.topLeft.y >= node.midY) ||
(rect.bottomRight.y >= node.midY && rect.topLeft.y <= node.midY))
{
yOver = true;
}
if (yOver || xOver == true)
{
System.out.println("intersection found");
return true;
}
else
{
System.out.println("no intersection found");
return false;
}
}
在使用随机矩形测试此代码后,我知道有很多情况没有涵盖,但我不确定哪些或如何解决它们。有谁知道更好,更彻底的算法?
答案 0 :(得分:1)
你的算法很棒。在这里实施一点清洁;你正在使用比你需要的更多的布尔值。
boolean isIntersect(Rectangle rect, Quadrant node)
{
return (rect.bottomRight.x >=node.midX && rect.topLeft.x <= node.midX)
|| (rect.bottomRight.y <= node.midY && rect.topLeft.y >= node.midY)
}
在您的代码中,您似乎还在测试矩形的情况
bottomRight.x <= node.midX && topLeft.x >= node.midX
意味着右下角实际上是矩形的左下角,左上角实际上是右上角。 (在y值的测试中也有类似的情况。)
在创建矩形时,您是否采取了任何措施来确保右下角和左上角的坐标确实代表这些角?