python - Matplotlib 参数化曲面图结果出乎意料,为什么?

标签 python matplotlib 3d surface parametric-equations

我正在尝试绘制一个椭球体,所以我想我应该修改 matplotlib 3D 绘图页面中球体的示例代码。

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()

如果您运行代码,您将看到绘图返回一个美观的半内翻船状表面,但遗憾的是不是椭圆体。

已包含sphere代码(已注释掉)以进行比较。

这里有什么明显我遗漏的东西吗?

最佳答案

为什么要更改参数化?以球体为例,您只需更改半轴长度:

# 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))

关于python - Matplotlib 参数化曲面图结果出乎意料,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28398660/

相关文章:

python - 使用正则表达式在 python 中的字符串中将 Boolean true 转换为 True

python - y 轴的最小值未应用于 matplotlib vlines 图中

python - 如何将绘图添加到子图 matplotlib

python - 使用散点数据集生成热图

c++ - glUnproject 和重新绘制场景后的奇怪结果

python - 用python定义chromedriver selenium的下载目录

python - 如何让 pycharm 打破我的异常(exception)

python - cv.smooth() 去哪儿了?我在 cv2 中找不到等效项

java - 在java中使用3D设计

3d - Assimp 模型有纹理但没有纹理坐标