Параметрическая поверхность Matplotlib сюжет неожиданные результаты, почему?

Я пытаюсь построить эллипсоид, поэтому я решил изменить пример кода для сферы со страницы 3D-построения matplotlib.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Ellipsoid
u = np.linspace(-np.pi/2.0,np.pi/2.0,100)
v = np.linspace(-np.pi,np.pi,100)
x = 10 * np.outer(np.cos(u), np.cos(v))
y = 10 * np.outer(np.cos(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.sin(v))


# Sphere
#u = np.linspace(0, 2 * np.pi, 100)
#v = np.linspace(0, np.pi, 100)
#x = 10 * np.outer(np.cos(u), np.sin(v))
#y = 10 * np.outer(np.sin(u), np.sin(v))
#z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))

ax.plot_surface(x, y, z,  rstride=4, cstride=4, cmap = cm.copper)
ax.set_xlabel('x-axis')
ax.set_ylabel('y-axis')
ax.set_zlabel('z-axis')
plt.show()

Если вы запустите код, вы увидите, что сюжет возвращает эстетически приятную половину изнутри, как поверхность лодки, но, к сожалению, не эллипсоид.

Включили код сферы (закомментированный) для сравнения.

Есть ли здесь что-то очевидное, чего мне не хватает?

1 ответ

Решение

Почему вы изменили параметризацию? Начиная со сферы в качестве примера, вам нужно только изменить длину полуоси:

# Ellipsoid
u = np.linspace(0, 2.*np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 60 * np.outer(np.cos(u), np.sin(v))
y = 20 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
Другие вопросы по тегам