삼각 메쉬를 사용한 더 많은 3D 표면

Beginner

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

소개

이 튜토리얼은 Python 의 Matplotlib 라이브러리에서 삼각 메쉬를 사용하여 3D 표면을 생성하는 방법을 보여줍니다. 삼각 메쉬를 사용하여 표면을 플로팅하는 두 가지 예시를 보여줍니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

필요한 라이브러리 가져오기

필요한 라이브러리인 matplotlib.pyplotnumpy를 가져오는 것으로 시작합니다. 또한 삼각 메쉬를 생성하기 위해 matplotlib.tri를 가져옵니다.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as mtri

메쉬 생성

매개변수화 변수 uv의 공간에서 메쉬를 생성합니다. 이는 np.meshgrid() 함수를 사용하여 uv 점의 그리드를 생성하여 수행됩니다.

u = np.linspace(0, 2.0 * np.pi, endpoint=True, num=50)
v = np.linspace(-0.5, 0.5, endpoint=True, num=10)
u, v = np.meshgrid(u, v)
u, v = u.flatten(), v.flatten()

표면 정의

다음으로, 표면을 정의합니다. 이 예제에서는 u, v 쌍을 받아 x, y, z 삼중항을 반환하는 뫼비우스 매핑 (Mobius mapping) 을 사용합니다.

x = (1 + 0.5 * v * np.cos(u / 2.0)) * np.cos(u)
y = (1 + 0.5 * v * np.cos(u / 2.0)) * np.sin(u)
z = 0.5 * v * np.sin(u / 2.0)

매개변수 공간 삼각화

x, y, z 점을 연결할 삼각형을 결정하기 위해 매개변수 공간을 삼각화합니다.

tri = mtri.Triangulation(u, v)

표면 플롯

마지막으로, plot_trisurf() 함수를 사용하여 표면을 플롯합니다. 매개변수 공간의 삼각형은 어떤 x, y, z 점이 모서리로 연결되는지 결정합니다.

ax = plt.figure().add_subplot(projection='3d')
ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap=plt.cm.Spectral)
ax.set_zlim(-1, 1)

마스크 생성

이 예제에서는 원치 않는 삼각형을 제거하기 위해 마스크를 생성합니다. 먼저 매개변수 공간 radiiangles를 생성합니다.

n_angles = 36
n_radii = 8
min_radius = 0.25
radii = np.linspace(min_radius, 0.95, n_radii)

angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
angles[:, 1::2] += np.pi/n_angles

x, y, z 점으로 매핑

radius, angle 쌍을 x, y, z 점으로 매핑합니다.

x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
z = (np.cos(radii)*np.cos(3*angles)).flatten()

삼각 분할 생성

Triangulation() 함수를 사용하여 삼각 분할을 생성합니다. 삼각형이 없으므로 Delaunay 삼각 분할이 생성됩니다.

triang = mtri.Triangulation(x, y)

원치 않는 삼각형 마스크 처리

각 삼각형의 중간점을 계산하고 주어진 반경 내에 속하는지 확인하여 원치 않는 삼각형을 마스크 처리합니다.

xmid = x[triang.triangles].mean(axis=1)
ymid = y[triang.triangles].mean(axis=1)
mask = xmid**2 + ymid**2 < min_radius**2
triang.set_mask(mask)

표면 플롯

마지막으로, plot_trisurf() 함수를 사용하여 표면을 플롯합니다.

ax = plt.figure().add_subplot(projection='3d')
ax.plot_trisurf(triang, z, cmap=plt.cm.CMRmap)

요약

이 튜토리얼에서는 Python 의 Matplotlib 라이브러리에서 삼각 메쉬를 사용하여 3D 표면을 생성하는 방법을 시연했습니다. 메쉬 생성, 표면 정의, 매개변수 공간 삼각화, 마스크 생성 및 표면 플롯과 관련된 단계를 다루었습니다.