3D 플롯 투영 유형 #

3D 플롯의 다양한 카메라 투영과 원근 투영의 초점 거리 변경 효과를 보여줍니다. Matplotlib는 초점 거리 변경의 '확대/축소' 효과를 수정합니다.

기본 초점 거리 1은 시야각(FOV) 90도에 해당합니다. 1과 무한대 사이의 초점 거리를 늘리면 이미지가 "평평해지며" 1과 0 사이의 초점 거리를 줄이면 원근감이 과장되고 이미지의 깊이가 더 뚜렷해집니다. 제한적인 경우, 무한대의 초점 길이는 줌 효과를 보정한 후 직교 투영에 해당합니다.

다음 방정식을 통해 FOV에서 초점 거리를 계산할 수 있습니다.

\[1 / \tan (\mathrm{FOV} / 2)\]

혹은 그 반대로도:

\[\mathrm{FOV} = 2 \arctan (1 / \mathrm{focal length})\]
'ortho' focal_length = ∞, 'persp' focal_length = 1(기본값), 'persp' focal_length = 0.2
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt


fig, axs = plt.subplots(1, 3, subplot_kw={'projection': '3d'})

# Get the test data
X, Y, Z = axes3d.get_test_data(0.05)

# Plot the data
for ax in axs:
    ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)

# Set the orthographic projection.
axs[0].set_proj_type('ortho')  # FOV = 0 deg
axs[0].set_title("'ortho'\nfocal_length = ∞", fontsize=10)

# Set the perspective projections
axs[1].set_proj_type('persp')  # FOV = 90 deg
axs[1].set_title("'persp'\nfocal_length = 1 (default)", fontsize=10)

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

Sphinx-Gallery에서 생성한 갤러리