Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在半对数比例上查找两条直线的交点_Python_Numpy_Matplotlib - Fatal编程技术网

Python:在半对数比例上查找两条直线的交点

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

在半对数比例图上有两条线。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 = 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)]