已知矩形四个顶点坐标,如何正确计算该矩形的长度与宽度?
矩形长宽计算方案
矩形的几何特性可以直接解决这个判定问题:从任意顶点出发到其余三个顶点的距离中,最长的那个必然是对角线,剩下两个较小值就是矩形的长和宽。
具体操作步骤
- 任选一个顶点作为基准点,分别计算它到剩余三个顶点的欧氏距离,得到三个距离值
- 对三个距离值做排序,最大值即为对角线长度,剩下的两个值就是矩形的宽和长,你可以按需将较大的边定义为长、较小的定义为宽
- 可选验证步骤:用勾股定理校验结果准确性,两个短边的平方和与长边(对角线)平方的差值如果在允许的浮点数误差范围内(通常取
1e-6),就说明输入顶点确实符合矩形特征,结果有效。
通用代码示例(适用于任意旋转角度的矩形)
import math def get_rect_length_width(points): # points格式:存储4个顶点坐标的列表,每个坐标为(x, y)格式的元组/列表 base_x, base_y = points[0] dist_list = [] for (x, y) in points[1:]: # 计算欧氏距离 dist = math.hypot(x - base_x, y - base_y) dist_list.append(dist) # 排序后取前两个值作为宽、长 dist_list.sort() width, length, diagonal = dist_list # 校验输入是否为矩形 if abs(width ** 2 + length ** 2 - diagonal ** 2) > 1e-6: raise ValueError("输入的四个顶点无法构成矩形") return length, width
如果你的矩形是轴对齐(边和坐标轴平行)的场景,还可以用更简单的方法:提取所有顶点的x坐标的最大值减最小值得到一个边长,y坐标的最大值减最小值得到另一个边长,无需计算距离。
内容的提问来源于stack exchange,提问作者Ahmed Mohamed
相关产品推荐
相关产品推荐

