简介
本实验展示了三维绘图的不同相机投影,以及使用Python Matplotlib改变透视投影焦距的效果。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问Jupyter Notebook进行练习。
有时,你可能需要等待几秒钟让Jupyter Notebook完成加载。由于Jupyter Notebook的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向Labby提问。课程结束后提供反馈,我们会及时为你解决问题。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
本实验展示了三维绘图的不同相机投影,以及使用Python Matplotlib改变透视投影焦距的效果。
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问Jupyter Notebook进行练习。
有时,你可能需要等待几秒钟让Jupyter Notebook完成加载。由于Jupyter Notebook的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向Labby提问。课程结束后提供反馈,我们会及时为你解决问题。
首先,导入必要的库,包括Matplotlib以及来自mpl_toolkits.mplot3d的Axes3D。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
获取用于三维绘图的测试数据。
X, Y, Z = axes3d.get_test_data(0.05)
使用plt.subplots
创建一个包含三个子图的图形。
fig, axs = plt.subplots(1, 3, subplot_kw={'projection': '3d'})
使用plot_wireframe
在三个子图中的每个子图上绘制数据。
for ax in axs:
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
将第一个子图设置为使用视场(FOV)为0度且焦距为无穷大的正交投影。
axs[0].set_proj_type('ortho') ## FOV = 0 deg
axs[0].set_title("'ortho'\nfocal_length = ∞", fontsize=10)
将第二个子图设置为使用默认视场(FOV)为90度且焦距为1的透视投影。
axs[1].set_proj_type('persp') ## FOV = 90 deg
axs[1].set_title("'persp'\nfocal_length = 1 (default)", fontsize=10)
将第三个子图设置为使用视场为157.4度且焦距为0.2的透视投影。
axs[2].set_proj_type('persp', focal_length=0.2) ## FOV = 157.4 deg
axs[2].set_title("'persp'\nfocal_length = 0.2", fontsize=10)
使用plt.show()
显示绘图。
plt.show()
本实验展示了如何使用Python的Matplotlib创建3D绘图,以及如何更改绘图的投影类型和焦距。正交投影会使图像变平,而透视投影会夸大透视效果并赋予图像更明显的深度。默认焦距1对应于90度的视场(FOV)。