我有两个要点A(10,20)和B(15,30)。这些点生成线AB。我需要在Python中的点B上绘制一条长度为6(每个方向为3个单位)的垂直线CD。
我已经具有使用以下代码的AB行的某些属性:
from scipy import stats
x = [10,15]
y = [20,30]
slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
如何计算C和D的位置。我需要它们的X和Y值。
C和D的值将用于使用Shapely库实现另一个目标。
最佳答案
如果slope
是AB的斜率,则CD的斜率是-1/slope
。这等于垂直变化超过水平变化:dy/dx = -1/slope
。这给出了dx = -slope*dx
。根据毕达哥拉斯定理,您具有3**2 = dy**2+dx**2
。替换为dx
,您会得到3**2 = (-slope*dy)**2+dy**2
3**2 = (slope**2 + 1)*dy**2
dy**2 = 3**2/(slope**2+1)
dy = math.sqrt(3**2/(slope**2+1))
然后,您可以获取dx = -slope*dy
。最后,您可以使用dx
和dy
来获取C和D。因此,代码为:
import math
dy = math.sqrt(3**2/(slope**2+1))
dx = -slope*dy
C[0] = B[0] + dx
C[1] = B[1] + dy
D[0] = B[0] - dx
D[1] = B[1] - dy
(请注意,尽管
math.sqrt
仅返回一个数字,但通常会有一个正负平方根。C对应正平方根,D对应负数)。