はじめに
この実験では、Python の Matplotlib を使って、3D プロットのさまざまなカメラ投影と、透視投影における焦点距離の変更の影響を示します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
まず、必要なライブラリをインポートします。ここでは、Matplotlib と mpl_toolkits.mplot3d からの Axes3D をインポートします。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
データの取得
3D プロット用のテストデータを取得します。
X, Y, Z = axes3d.get_test_data(0.05)
サブプロット付きのグラフを作成する
plt.subplotsを使って、3 つのサブプロット付きのグラフを作成します。
fig, axs = plt.subplots(1, 3, subplot_kw={'projection': '3d'})
データをプロットする
plot_wireframeを使って、3 つのサブプロットのそれぞれにデータをプロットします。
for ax in axs:
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
正射投影を設定する
最初のサブプロットに、視野角(FOV)が 0 度で焦点距離(focal_length)が無限大の正射投影を使用するように設定します。
axs[0].set_proj_type('ortho') ## FOV = 0 deg
axs[0].set_title("'ortho'\nfocal_length = ∞", fontsize=10)
透視投影を設定する
2 番目のサブプロットに、既定の視野角(FOV)90 度と焦点距離(focal_length)1 の透視投影を使用するように設定します。
axs[1].set_proj_type('persp') ## FOV = 90 deg
axs[1].set_title("'persp'\nfocal_length = 1 (default)", fontsize=10)
3 番目のサブプロットに、視野角(FOV)157.4 度と焦点距離(focal_length)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 は、視野角(FOV)90 度に対応します。