phi = 0.5
theta = 0.25
psi = 0
norm = np.array([0, 0, h0]).reshape(3, 1)
normp = euler_rot(norm, phi, theta, psi)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot([0, normp[0]], [0, normp[1]], zs=[0, normp[2]])
x = np.hstack([(r0 * (1 - h) * np.cos(u)) for h in linspace(0, 1, num_levels)])
y = np.hstack([(r0 * (1 - h) * np.sin(u)) for h in linspace(0, 1, num_levels)])
z = np.hstack([(np.ones(len(u)) * h * h0) for h in linspace(0, 1, num_levels)])
XYZ = np.vstack([x, y, z])
xp, yp, zp = euler_rot(XYZ, phi, theta, psi)
ax.plot_wireframe(xp, yp, zp)
создание 3D-конуса или диска и постоянное обновление его оси симметрии с помощью matplotlib