使用Shapely计算嵌套矩形接触线段长度的问题求助
问题分析与解决
你的代码错误原因在于:两个矩形的交集是小矩形本身,intersection.boundary.length计算的是小矩形的周长((200+199)*2=798),这并不是两个矩形接触的线段总长度。
要得到正确结果,应该计算两个矩形边界的交集长度,也就是它们共享的边的总长度:
from shapely.geometry import Polygon big_rect = Polygon([(0,0), (0,600), (800,600), (800,0)]) small_rect = Polygon([(0,0), (0,199), (200,199), (200,0)]) # 获取两个矩形的边界线 big_boundary = big_rect.boundary small_boundary = small_rect.boundary # 计算边界的交集(即两个矩形接触的线段) contact_segments = big_boundary.intersection(small_boundary) # 计算接触线段的总长度 touch_length = contact_segments.length print(touch_length) # 输出 399
原理说明:
- 大矩形和小矩形共享两条边:从(0,0)到(0,199)的竖边(长度199),以及从(0,0)到(200,0)的横边(长度200),总和为399。
- 通过计算两个多边形边界的交集,直接得到这些共享线段,再取长度就得到了正确结果。
内容的提问来源于stack exchange,提问作者AIpython
相关产品推荐
相关产品推荐

