我有一个3D圆形抛物面表面,我想绘制一个螺旋线,从表面上的任意一点开始,并在“拥抱”表面的同时下降。
这是我迄今为止的尝试:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
# Surface ------------------
# Create the mesh in polar coordinates and compute corresponding Z
r0 = 5
r = np.linspace(0, r0, 50)
p = np.linspace(0, 2*np.pi, 50)
R, P = np.meshgrid(r, p)
Z = -R**2 + r0**2
# Express the mesh in the cartesian system
X, Y = R*np.cos(P), R*np.sin(P)
# Plot the surface
ax.plot_surface(X, Y, Z, linewidth=0, antialiased=False, alpha=0.2)
# Spiral -------------------
u = np.arange(0, 29, 0.1)
x = 0.17*u*np.cos(u)
y = 0.17*u*np.sin(u)
z = -0.15*u/np.pi*(x**2 + y**2) + r0**2
# Plot spiral
ax.plot3D(x, y, z, 'r')
plt.show()
然而,我的螺旋实际上并没有跟随表面。
我也试过这个:
x = []
y = []
z = []
for i in range(50):
x.append(X[i,i])
y.append(Y[i,i])
z.append(-(X[i,i]**2 + Y[i,i]**2) + r0**2)
ax.plot3D(x, y, z, 'b')
我不知道如何让它绕着曲面做更多的圆周运动,有什么想法吗?
2条答案
按热度按时间gc0ot86w1#
第二次尝试中的公式是正确的。如果我在你第一次尝试中使用相同的公式,我就得到了你想要的。
行
z = -0.15*u/np.pi*(x**2 + y**2) + r0**2
需要替换为-(x**2 + y**2) + r0**2
。再现性:
输出如下所示:
ctehm74n2#
抛物面的隐式方程是
r² = x² + y²
。所以对于极坐标中的任何曲线
在抛物面中的嵌入是
可以使用
nΘ
而不是Θ
作为三角函数的自变量来调整旋转次数。