假设我有以下重叠矩形("a"和"b"):
aaaaaaaa
aaaaccccbbbbb
aaaaccccbbbbb
aaaaccccbbbbb
bbbbbbbbb
bbbbbbbbb
Run Code Online (Sandbox Code Playgroud)
我已经看到了很多关于如何计算内部矩形区域("c")的想法,但是我将如何获得实际的顶部/左/底/右坐标呢?
可以根据以下逻辑找到两个矩形的重叠区域的X坐标.
要找到Y坐标,请在四个假设的最后一个以及所有三个假设中用Y替换X.
假设:
A和B是矩形(它们的边沿X轴和Y轴对齐),
每个矩形由两个点(x min/y min)定义 - (x max/y max)
其中x min < x max 和 y min < y max .
Ax min < Bx min
案例1 - 没有重叠:
+--------+
|A |
| | +----+
| | |B |
| | +----+
| |
+--------+
Run Code Online (Sandbox Code Playgroud)
斧分钟 < 斧最大 < Bx的最小 < Bx的最大值 ⇒没有重叠.
案例2 - 一些重叠:
+--------+
|A |
| +--+-+
| |B | |
| +--+-+
| |
+--------+
Run Code Online (Sandbox Code Playgroud)
斧分钟 < Bx的分 < 斧最大 < Bx的最大值 ⇒重叠X坐标:Bx的分钟 - 斧最大
案例3 - 完全重叠:
+--------+
|A |
| +----+ |
| |B | |
| +----+ |
| |
+--------+
Run Code Online (Sandbox Code Playgroud)
斧分钟 < Bx的分 < Bx的最大值 < 斧最大 ⇒重叠X坐标:Bx的分钟 - Bx的最大值
PS:您实际上可以进一步简化此算法.重叠X坐标始终是:
max(Ax min,Bx min) - min(Ax max,Bx max)
除非第二个值小于第一个值; 这意味着没有重叠.