Python:如何计算两个矩形间的水平距离?
计算同一行两个矩形的水平距离
没问题,我来帮你理清楚同一行两个矩形的水平距离怎么算——先明确坐标规则,再结合你的例子一步步拆解:
先明确坐标定义(关键前提)
首先默认你的矩形坐标是左上角顶点为(x, y),w是宽度,h是高度(这是GUI/图像领域非常常用的定义方式)。基于这个规则,我们可以先算出每个矩形的核心边界:
- 左边界:
L = x - 右边界:
R = x + w - 上边界:
T = y - 下边界:
B = y + h
第一步:判断是否属于“同一行”
所谓“同一行”,本质是两个矩形在垂直方向(y轴)有重叠区域(或者完全包含)。判断方法很简单:
计算两个矩形垂直范围的交集,如果交集不为空,就是同一行。
用公式表示就是:max(T1, T2) < min(B1, B2)
max(T1, T2):两个矩形上边界的最大值(重叠区域的顶部)min(B1, B2):两个矩形下边界的最小值(重叠区域的底部)
如果这个不等式成立,说明垂直方向有重叠,属于同一行。
第二步:计算水平距离
确定是同一行后,分两种情况计算水平距离:
情况1:水平方向重叠/接触
如果两个矩形在水平方向有重叠(或者刚好挨在一起),水平距离为0。判断重叠的公式:max(L1, L2) <= min(R1, R2)
max(L1, L2):两个矩形左边界的最大值min(R1, R2):两个矩形右边界的最小值
如果这个不等式成立,说明水平方向有重叠或接触。
情况2:水平方向不重叠
如果两个矩形水平方向没有重叠,距离就是左边矩形的右边界到右边矩形的左边界的差值。用公式可以统一写成:max(0, max(L1, L2) - min(R1, R2))
这个公式会自动处理两种情况:重叠时返回0,不重叠时返回实际间隙。
结合你的例子计算
我们把你的矩形参数代入:
矩形R1参数
x=515, y=942, w=525, h=954
- L1=515,R1=515+525=1040
- T1=942,B1=942+954=1896
矩形R2参数
x=382, y=938, w=508, h=960
- L2=382,R2=382+508=890
- T2=938,B2=938+960=1898
1. 判断是否同一行
max(942, 938) = 942,min(1896, 1898)=1896
因为942 < 1896,所以两个矩形属于同一行。
2. 计算水平距离
max(515, 382)=515,min(1040, 890)=890
因为515 < 890,说明水平方向有重叠,所以水平距离为0。
内容的提问来源于stack exchange,提问作者AzkaGilani
相关产品推荐
相关产品推荐

