首页 > 解决方案 > 直线与闭合曲线的交点

问题描述

我正在尝试计算一条线和一条闭合曲线(存储在文件中)之间的交点

我试图适应这个

import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
from scipy.optimize import bisect
import numpy as np
import csv
from scipy.interpolate import interp1d
from scipy.optimize import bisect
#reading curve from file
r = ...
z = ...


# vertical line
x = 1.885, 1.885
y = [-3,3]



z_ves = interp1d(r_ves, z_ves, fill_value="extrapolate")
plt.figure(num=None, figsize=(10, 6), dpi=100, facecolor='w', edgecolor='k')
plt.plot(r_ves, z_ves(r_ves))
plt.axvline(x=1.885,ymin=-3,ymax=3)


# #use interp1d to get interpolated points
y = interp1d(x, y, fill_value="extrapolate")
# stress = interp1d(strain, stress)
# #set starting points
x1 = max(x[0], r_ves[0])
x2 = min(x[-1], r_ves[-1])
max_err = .01
# #create function
f = lambda x : z_ves(x) - y(x)
#find x1 where f(x1) = 0
x1 = bisect(f, x1, x2, xtol = .001)
y1 = z_ves(x1)
#
plt.figure(num=None, figsize=(10, 6), dpi=100, facecolor='w', edgecolor='k')
plt.plot(r_ves, z_ves(r_ves))
plt.plot(x, y(x))
plt.scatter(x1, y1)
plt.show()

我收到运行时警告,因为我认为这条线是垂直的。

RuntimeWarning:在乘法中遇到无效值 y_new = slope*(x_new - x_lo)[:, None] + y_lo

我知道有两个路口(见图) 在此处输入图像描述

我如何获得交叉点?

标签: pythonlinecurve

解决方案


函数y应该对垂直线进行插值,但您已经知道它的方程:x=1.885。因此,将给定x值代入曲线方程应该会给您需要求解的方程以获得y交点的坐标。z_ves(1.885)应该给你想要的结果交点。


推荐阅读