Shapely中平行直线串斜率计算结果异常的原因?
问题:Shapely计算平行直线斜率结果异常的原因及解决办法
我有两条平行直线:line1 = [(1,3),(4,3)] 和 line2 = [(1,2),(4,2)](配图:
)。
手动用公式 m=(y₂-y₁)/(x₂-x₁) 计算时,两条直线的斜率均为0:
- line1: m₁=(3-3)/(4-1)=0
- line2: m₂=(2-2)/(4-1)=0
m₁=m₂,因此两条直线是平行的。但用Shapely创建LineString对象后,计算出的斜率不再相等,代码输出m1为-0.5,m2为-2.0。
原因分析
问题出在坐标提取的逻辑错误:
你错误地将单个坐标点的x、y值拆分成了起点和终点的x坐标。例如:
xs1, xe1 = line1.coords[0]中,line1.coords[0]是第一个点的(x₁,y₁)=(1,3),因此xs1=1,xe1=3;ys1, ye1 = line1.coords[1]中,line1.coords[1]是第二个点的(x₂,y₂)=(4,3),因此ys1=4,ye1=3。
代入计算式m1=(ys1-ye1)/(xs1-xe1)后,实际计算的是(4-3)/(1-3)=-0.5,完全偏离了正确的斜率公式。
修正后的代码
正确提取两个点的x、y值,按照斜率公式计算:
import matplotlib.pyplot as plt from shapely.geometry import LineString line1 = LineString([(1,3),(4,3)]) line2 = LineString([(1,2),(4,2)]) fig, ax = plt.subplots() ax.plot(*line1.xy) ax.plot(*line2.xy) # 正确提取两个端点的坐标 x1, y1 = line1.coords[0] x2, y2 = line1.coords[1] m1 = (y2 - y1) / (x2 - x1) x3, y3 = line2.coords[0] x4, y4 = line2.coords[1] m2 = (y4 - y3) / (x4 - x3) print(m1, m2) # 输出:0.0 0.0
内容的提问来源于stack exchange,提问作者jonsken
相关产品推荐
相关产品推荐

