样条线与python scipy中的平面相交

样条线与python scipy中的平面相交,python,numpy,scipy,Python,Numpy,Scipy,我有一堆3D数据点,我正在使用scipy薄板样条线通过它们拟合曲面,如下所示: import numpy as np import scipy as sp import scipy.interpolate # x, y, z are the 3D point coordinates spline = sp.interpolate.Rbf(x, y, z, function='thin_plate', smooth=5, episilon=5) x_grid = np.linspace(0,

我有一堆3D数据点,我正在使用scipy薄板样条线通过它们拟合曲面,如下所示:

import numpy as np
import scipy as sp
import scipy.interpolate

# x, y, z are the 3D point coordinates

spline = sp.interpolate.Rbf(x, y, z, function='thin_plate', smooth=5, episilon=5)
x_grid = np.linspace(0, 512, 1024)
y_grid = np.linspace(0, 512, 1024)
B1, B2 = np.meshgrid(x_grid, y_grid, indexing='xy')
Z = spline(B1, B2)

如所附图像所示,这符合所需的曲面

现在我想做的是能够查询样条曲线与给定平面相交的位置

因此,给定这个拟合曲面,我如何查询该曲面在哪个点切割平面,例如,z=25

因此,上面的代码是合适的:

z = f(x, y)

现在安装了
f
,我想知道是否可以进行反向查找,即我想进行
f^{-1}(z)

不确定这是否足以实现您的最终目标,但其中一个可能是使用函数:

将numpy导入为np
z_目标=25
msk=np.isclose(Z,Z_目标)
x_目标=B1[msk]
y_目标=B2[msk]
请注意,您可以在
np.isclose
中随心所欲地调整容差级别


然后您可以预期
Z_目标=样条曲线(x_目标,y_目标)
距离
Z_目标的公差

三维等高线图将在所需高度处很好地插值等高线:

从matplotlib导入pyplot作为plt
从mpl_toolkits.mplot3d导入Axes3D
将numpy作为np导入
将scipy作为sp导入
导入scipy.interpolate
N=10
x=np.随机均匀(100400,N)
y=np.随机均匀(100400,N)
z=np.随机均匀(0,100,N)
#x、y、z是三维点坐标
样条曲线=sp.interpolate.Rbf(x,y,z,function='thin_plate',smooth=5,episilon=5)
x_grid=np.linspace(0,512,1024)
y_grid=np.linspace(0,512,1024)
B1,B2=np.meshgrid(x_网格,y_网格,索引='xy')
Z=样条曲线(B1,B2)
图=plt.图()
ax=图添加子地块(111,投影=“3d”)
等高线(B1,B2,Z,标高=[25],偏移量=25,颜色=['红色])
最大标绘曲面(B1、B2、Z、cmap='秋天,lw=1,rstride=10,cstride=10,alpha=0.5)
plt.show()

PS:如果需要曲线的xy坐标,它们将作为二维坐标列表存储在轮廓内

contour = ax.contour(B1, B2, Z, levels=[25], offset=25, colors=['red'])
for segments in contour.allsegs:
    for segment in segments:
        print("X:", segment[:,0])
        print("Y:", segment[:,1])

等高线图(如果您只需要一条等高线,则等高线图的级别为[25]
)就是为了达到这种目的。请参阅示例和帖子。您能提供一个最低限度的工作和可执行示例吗?包括
F
x
y
z
等。。。这个问题的解决方法可能真的很简单。但我需要一些样本数据。啊,这很聪明。我在反转函数的过程中考虑了更多,并意识到可能无论如何都不能保证有一个反转,这是
offset
等高线参数的一个很好的应用!我确实需要记住这一点。:)这真是太棒了。非常感谢。在一定高度上可以有多条断开连接的曲线,而且它们在绘图的限制区域中也不一定是闭合的。