You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shapely中平行直线串斜率计算结果异常的原因?

问题:Shapely计算平行直线斜率结果异常的原因及解决办法

我有两条平行直线:line1 = [(1,3),(4,3)] 和 line2 = [(1,2),(4,2)](配图:two parallel lines)。

手动用公式 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:20:35