Java 检查一个矩形是否与另一个矩形相交或在另一个矩形内

Java 检查一个矩形是否与另一个矩形相交或在另一个矩形内,java,geometry,Java,Geometry,为了便于说明,我将以下情况分为两种情况 [P>中间的绿色矩形是矩形,我指的是我的基座,因为它是长方形是常量。< /P> 现在我想知道一个黄色的矩形是相交的,是在里面还是完全封装了绿色的矩形 我看过这篇文章并理解它,但是(除非我忘记了什么),它忽略了一个黄色矩形在绿色矩形中的情况。我能想到的最简单的解决方案是按任意顺序重复检查4个点,但这是唯一的(“最佳”)解决方案吗?两个矩形A,B有一个非空的交叉点iif A.l < B.r and A.r > B.l and A.t < B

为了便于说明,我将以下情况分为两种情况

[P>中间的绿色矩形是矩形,我指的是我的基座,因为它是长方形是常量。< /P> 现在我想知道一个黄色的矩形是相交的,是在里面还是完全封装了绿色的矩形


我看过这篇文章并理解它,但是(除非我忘记了什么),它忽略了一个黄色矩形在绿色矩形中的情况。我能想到的最简单的解决方案是按任意顺序重复检查4个点,但这是唯一的(“最佳”)解决方案吗?

两个矩形
A
B
有一个非空的交叉点iif

A.l < B.r and A.r > B.l and A.t < B.b and A.b > B.t

只需在所有4个顶点上迭代,并检查它们是否都在绿色矩形内。不需要魔法,让我看看。黄色。左侧<绿色。右侧?符合事实的黄.右>绿.左?符合事实的黄色.顶部>绿色.底部?符合事实的黄色。底部<绿色。顶部?也是这样。那么问题出在哪里呢?你需要完整的信息吗?或者仅仅知道两个矩形有一个非空的交点就足够了吗?介意回答我的问题吗?如果
a
是较小的矩形,意味着
B
完全包含
a
,有没有更好的方法来检查这一点,然后在代码中简单地交换
a
B
?@MeikVtune:如果您想执行所有三个测试,您可以执行序列
a.l
a.r
B.l
B.r
,以及其他轴的类似操作。这将进行6次比较,合并的历史记录包含所有信息。如果你把它组织在一个硬编码的决策树中,你可以得到非常有效的代码。
A.l <= B.l and A.r >= B.r and A.t <= B.t and A.b >= B.b