3D プロットの投影タイプ

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、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 度に対応します。