Python:在半对数比例上查找两条直线的交点
在半对数比例图上有两条线。Line1为绿色,而Line2为深紫色。如何找到第1行(绿色)和第2行(深紫色)之间的交点?我尝试了基于维基百科的交集公式,但它返回了红线Python:在半对数比例上查找两条直线的交点,python,numpy,matplotlib,Python,Numpy,Matplotlib,在半对数比例图上有两条线。Line1为绿色,而Line2为深紫色。如何找到第1行(绿色)和第2行(深紫色)之间的交点?我尝试了基于维基百科的交集公式,但它返回了红线 import numpy as np import matplotlib.pyplot as plt xmin, xmax = 2000, 7000 ymin, ymax = 10, 50000 #lighting fixture limitation cct_min = 2700 cct_max = 6000 illu_min
import numpy as np
import matplotlib.pyplot as plt
xmin, xmax = 2000, 7000
ymin, ymax = 10, 50000
#lighting fixture limitation
cct_min = 2700
cct_max = 6000
illu_min = 110
illu_max = 2100
def findIntersection(x1,y1,x2,y2,x3,y3,x4,y4):
px= ( (x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) )
py= ( (x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) )
return [px, py]
#arrays
x_grid = np.array([2000, 3000, 4000, 5000, 6000, 7000])
x = np.linspace(xmin, xmax)
#plot
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xlim(xmin=xmin, xmax=xmax)
ax.set_ylim(ymin=ymin, ymax=ymax)
ax.set_yscale('log')
ax.axvline(x=4000, color='g', linestyle='-')
ax.plot([cct_min, cct_max],[illu_min,illu_max], color='darkviolet')
a,b = findIntersection(cct_min,illu_min,cct_max,illu_max,4000,10,4000,10000)
ax.axhline(y=b, color='r', linestyle='-')
plt.show()
谢谢。您可以首先将所有的
y
位置转换为对数空间,计算交点,然后获取结果py
的exp
对于垂直线,可以简化公式,但以下方法适用于任何类型的线。只要小心,所有的y
值都必须严格为正。输入线不是平行的
def findIntersection(x1、y1、x2、y2、x3、y3、x4、y4):
y1=np.log(y1)
y2=np.log(y2)
y3=np.log(y3)
y4=np.log(y4)
denom=(x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)
px=((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4))/denom
py=((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4))/denom
返回[px,np.exp(py)]