gpt4 book ai didi

python - 如何在曲面图上投影一条线?

转载 作者:行者123 更新时间:2023-11-28 18:56:49 26 4
gpt4 key购买 nike

我根据存储在 CSV 文件中的点数据创建了一个曲面图。如果我想在 3D 创建的表面上投影一条线(漂浮在表面上方)。方法是什么?

我尝试了来自 following post 的代码用于在 xy-xz-yz 平面上投影一条线。
我可以看到它在 xy-xz-yz 平面上投影线的端点。

如果我想投影到用点数据创建的表面上。我没有曲面方程。我创建了可用的点数据。

这是我想要实现的模型图像:
enter image description here
我生成了一个曲面,其中给定的散点存储在 CSV 文件中。现在我想将表面顶部的线(红线)投影到表面(作为绿线)。

最佳答案

让我们构建一个通用的 MCVE,首先我们导入所需的包:

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
import matplotlib.tri as mtri
np.random.seed(123456) # Fix the random seed

现在我们为表面 S 生成一组 3D 点(注意它是一个不规则网格):

NS = 100
Sx = np.random.uniform(low=-1., high=1., size=(NS,))
Sy = np.random.uniform(low=-1., high=1., size=(NS,))
Sz = -(Sx**2 + Sy**2) + 0.1*np.random.normal(size=(NS,))

还有一条参数曲线P:

NP = 100
t = np.linspace(-1, 1, NP)
Px = t
Py = t**2 - 0.5
Pz = t**3 + 1

解决你的问题的关键是 LinearNDInterpolator,它在 N 维中执行分段线性插值:

PSz = interpolate.LinearNDInterpolator(list(zip(Sx, Sy)), Sz)(list(zip(Px,Py)))

只需要 reshape 数据以将方法签名从单独的向量拟合到形状为 (Nsample,Ndims) 的矩阵,可以转换为:

list(zip(Sx, Sy))

我们可以从顶部查看数据:

tri = mtri.Triangulation(Sx, Sy)
fig, axe = plt.subplots()
axe.plot(Sx, Sy, '+')
axe.plot(Px, Py)
axe.triplot(tri, linewidth=1, color='gray')
axe.set_aspect('equal')
axe.grid()

enter image description here

完整的 3D 结果如下所示:

axe = plt.axes(projection='3d')
axe.plot_trisurf(tri, Sz, cmap='jet', alpha=0.5)
axe.plot(Px, Py, Pz)
axe.plot(Px, Py, PSz, linewidth=2, color='black')
axe.scatter(Sx, Sy, Sz)
axe.view_init(elev=25, azim=-45)

enter image description here

axe.view_init(elev=75, azim=-45)

enter image description here

关于python - 如何在曲面图上投影一条线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com