如何在Shapely中寻找一组2D点的可旋转最小外接矩形
使用Shapely计算2D点集的最小外接旋转矩形
核心实现步骤
Shapely内置了直接获取最小旋转外接矩形的能力,核心逻辑是利用凸包缩小计算范围(最小外接矩形必然包裹点集的凸包),再调用专属属性得到结果:
- 将原始2D点集转换为Shapely的
MultiPoint对象 - 计算点集的凸包(
convex_hull),减少后续计算量 - 调用凸包对象的
minimum_rotated_rectangle属性,直接获取最小旋转外接矩形
代码示例
from shapely.geometry import MultiPoint # 定义示例2D点集 points = [(1, 2), (3, 4), (5, 1), (2, 5), (4, 2)] # 转换为MultiPoint对象 multi_point = MultiPoint(points) # 计算点集的凸包 convex_hull = multi_point.convex_hull # 获取最小旋转外接矩形 min_rotated_rect = convex_hull.minimum_rotated_rectangle # 输出矩形的顶点坐标 print("最小旋转外接矩形顶点:", list(min_rotated_rect.exterior.coords)) # 输出矩形面积 print("矩形面积:", min_rotated_rect.area)
补充说明
- 若点集本身已是凸集,可跳过凸包计算,直接对
MultiPoint调用minimum_rotated_rectangle,但先计算凸包能提升大数量点集的处理效率 minimum_rotated_rectangle返回Polygon对象,可通过Shapely的多边形方法获取中心、边长、旋转角度等信息(旋转角度可通过矩形边的向量计算得出)
内容的提问来源于stack exchange,提问作者nickponline
相关产品推荐
相关产品推荐

