python - 直线与闭合曲线的交点
问题描述
我正在尝试计算一条线和一条闭合曲线(存储在文件中)之间的交点
我试图适应这个
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
我如何获得交叉点?
解决方案
函数y
应该对垂直线进行插值,但您已经知道它的方程:x=1.885
。因此,将给定x
值代入曲线方程应该会给您需要求解的方程以获得y
交点的坐标。z_ves(1.885)
应该给你想要的结果交点。
推荐阅读
- apache - .htaccess - 代码块的顺序是否起作用?
- sql-server - 在另一台 PC 上使用 SQL Server 数据库运行我的 WinForms 项目
- android - Android-studio:无法找到 adb
- php - PHP 随机分配人员到一个团队
- pypi - 是否可以用我自己的包替换具有特定名称的现有 pip 包?
- syntax - 如何使用 Hugo 嵌套短代码?省略了原始 HTML
- java - 如何使用 redisson 并保持微服务架构紧凑
- ios - 透明导航栏 iOS 13
- sql - 如何在 CASE 语句计算中对重复行求和
- angular - 如何使用 angular-google-charts 制作圆角条