【发布时间】:2020-04-07 16:59:30
【问题描述】:
我正在尝试计算直线和闭合曲线(存储在文件中)之间的交点
我尝试适应this
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 = 坡度*(x_new - x_lo)[:, None] + y_lo
如何获得交叉点?
【问题讨论】:
-
只是因为它可能会为您提供更好的答案:这不是曲线。完全没有。它只是一个多边形,谷歌中的“python 线多边形查找交点”可能会在几分钟内为您提供答案。