如何获得重叠的矩形坐标

Chr*_*ris 7 c#

假设我有以下重叠矩形("a"和"b"):

aaaaaaaa
aaaaccccbbbbb
aaaaccccbbbbb
aaaaccccbbbbb
    bbbbbbbbb
    bbbbbbbbb
Run Code Online (Sandbox Code Playgroud)

我已经看到了很多关于如何计算内部矩形区域("c")的想法,但是我将如何获得实际的顶部/左/底/右坐标呢?

sta*_*ica 9

可以根据以下逻辑找到两个矩形的重叠区域的X坐标.

要找到Y坐标,请在四个假设的最后一个以及所有三个假设中用Y替换X.


假设:

  • AB是矩形(它们的边沿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)

除非第二个值小于第一个值; 这意味着没有重叠.