判断一个矩形是否与一条线相接
Finding if a Rectangle Touches a Line
我有一个名为 Rectangle 的 class,它由两对整数组成,表示矩形左上角和右下角的 XY 坐标。我还有一个名为 Quadrant 的 class,它由正方形区域上最左边、中间和最右边的点的 X 值(分别为 leftX、midX 和 rightX)以及顶部、中间、和 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;
}
}
在使用随机矩形测试此代码后,我知道有很多情况这没有涵盖,但我不确定哪些情况或如何解决它们。有谁知道更好、更彻底的算法吗?
你的算法很棒。这里实现得更干净一些;您使用的布尔值比您需要的多得多。
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 值的测试中也有类似的情况。)
创建矩形时,您是否做了任何事情来确保为右下角和左上角给出的坐标确实代表了这些角?
我有一个名为 Rectangle 的 class,它由两对整数组成,表示矩形左上角和右下角的 XY 坐标。我还有一个名为 Quadrant 的 class,它由正方形区域上最左边、中间和最右边的点的 X 值(分别为 leftX、midX 和 rightX)以及顶部、中间、和 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;
}
}
在使用随机矩形测试此代码后,我知道有很多情况这没有涵盖,但我不确定哪些情况或如何解决它们。有谁知道更好、更彻底的算法吗?
你的算法很棒。这里实现得更干净一些;您使用的布尔值比您需要的多得多。
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 值的测试中也有类似的情况。)
创建矩形时,您是否做了任何事情来确保为右下角和左上角给出的坐标确实代表了这些角?