Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib로 3D 원근 투영과 직교 투영 한눈에 비교하기

Matplotlib 투영 방식(Projection Type) 개요

Matplotlib에서 3D 그래프를 그릴 때는 set_proj_type() 메서드를 사용해 투영(projection) 방식을 자유롭게 지정할 수 있습니다. 대표적인 두 가지 방식은 다음과 같습니다.

  • 원근 투영(Perspective, 'persp') : 카메라에서 멀어질수록 물체가 작아지는 방식으로, 실제 눈으로 보는 것과 유사한 입체감을 줍니다.
  • 직교 투영(Orthographic, 'ortho') : 깊이와 무관하게 물체의 크기를 동일하게 표현하는 방식으로, 기술 도면이나 정확한 형태 비교에 적합합니다.

두 방식의 차이를 확인하려면 아래 단계를 따라 하나의 figure에 두 개의 3D 서브플롯을 나란히 배치해 볼 수 있습니다.

구현 절차

  1. 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
  2. 새 figure를 생성하거나 기존 figure를 활성화합니다.
  3. 서브플롯 배치의 일부로 '~.axes.Axes'를 figure에 추가합니다.
  4. 첫 번째 축(ax1)의 투영 타입을 'persp'(원근 투영)로 설정합니다.
  5. 그래프 제목을 설정합니다.
  6. 같은 방식으로 두 번째 Axes를 figure에 추가합니다.
  7. 두 번째 축(ax2)의 투영 타입을 'ortho'(직교 투영)로 설정합니다.
  8. 그래프 제목을 설정합니다.
  9. show() 메서드를 호출해 그림을 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
ax1.set_proj_type('persp')
ax1.set_title('Perspective')

ax2 = fig.add_subplot(1, 2, 2, projection='3d')
ax2.set_proj_type('ortho')
ax2.set_title('Orthographic')

plt.show()

실행 결과

위 코드를 실행하면 왼쪽에는 원근 투영이 적용된 3D 축이, 오른쪽에는 직교 투영이 적용된 3D 축이 나란히 표시됩니다. 원근 투영에서는 축의 뒤쪽 끝이 앞쪽보다 좁아져 깊이감이 느껴지고, 직교 투영에서는 모든 격자선이 평행하게 유지되는 차이를 확인할 수 있습니다.

Matplotlib로 3D 원근 투영과 직교 투영 한눈에 비교하기