3D 하트 그래픽: 파이썬으로 사랑을 표현하는 법, python으로 하트 만들기
2023. 12. 1. 14:15ㆍMemo/etc
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt
import numpy as np
from skimage import measure
# Set up mesh
n = 100
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
z = np.linspace(-3, 3, n)
X, Y, Z = np.meshgrid(x, y, z)
# Create cardioid function
def f_heart(x, y, z):
F = (2*x**2 + 2*y**2 + z**2 - 1)**3 - 1/10*x**2*z**3 - y**2*z**3
return F
# Obtain value at every point in mesh
vol = f_heart(X, Y, Z)
verts, faces, normals, values = measure.marching_cubes(vol, 0, spacing=(0.1, 0.1, 0.1))
# Create a 3D figure
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
# Plot the surface
ax.plot_trisurf(verts[:, 0], verts[:,1], faces, verts[:, 2],
cmap='Spectral', lw=1)
ax.view_init(20, -20)
plt.show()
파이썬은 그 힘과 유연성으로 데이터 시각화에서 매우 중요한 도구입니다. 이 코드는 3차원 공간에 마치 심장 모양을 하고 있는 표면을 생성하고 시각화하는 것입니다. 이를 위해 여러 단계를 거치는데, 이를 하나씩 살펴보겠습니다.
라이브러리 임포트: 필요한 라이브러리들을 임포트합니다.
Axes3D
는 3D 플롯을 생성하는 데 필요합니다.pyplot
은 그래픽 관련 기능을 제공합니다.numpy
는 수치 계산을 위해 사용됩니다.skimage.measure
의marching_cubes
함수는 3D 볼륨 데이터로부터 표면을 추출하는 데 사용됩니다.
메시 설정:
x
,y
,z
는 각각 -3에서 3까지 범위의 값을 가지며, 이들의 조합을 통해 3D 공간상의 점들을 생성합니다.np.meshgrid
함수는 이 1차원 배열들을 3차원 그리드로 변환합니다.
심장 모양 함수 정의:
f_heart
함수는 주어진 (x), (y), (z) 좌표에 대해 심장 모양의 수학적 표현을 계산합니다.메시 포인트에 함수 적용:
vol
은f_heart
함수를 메시의 모든 점에 적용한 결과입니다. 이것은 3D 볼륨 데이터를 나타냅니다.
Marching Cubes 알고리즘 적용:
measure.marching_cubes
함수는 이 볼륨 데이터로부터 표면(verts, faces)을 추출합니다. 이는 주어진 볼륨 데이터 내에서 0의 값에 해당하는 표면을 찾는 것입니다.
3D 플롯 생성:
plt.figure
와add_subplot
을 사용하여 3D 플롯을 생성합니다.plot_trisurf
함수는 추출된 표면(verts, faces)을 시각화합니다. 이 때cmap
은 색상 맵을,lw
는 선의 두께를 지정합니다.
시점 설정 및 표시:
ax.view_init
함수는 플롯의 시점을 조정합니다.- 마지막으로
plt.show()
를 통해 생성된 3D 플롯을 표시합니다.
이렇게 전체 과정을 통해 3차원 심장 모양의 객체를 생성하고 시각화하는 것을 볼 수 있습니다.
이 과정을 통해 독자들은 파이썬을 사용하여 복잡한 수학적 표현을 시각화하는 방법과 함께, 3D 데이터를 플로팅하고 조작하는 기본적인 방법을 배울 수 있습니다. 이러한 프로젝트는 파이썬이 단순한 데이터 분석 이상의 것을 할 수 있음을 보여주며, 코딩과 수학을 접목시킬 수 있는 무한한 가능성을 열어줍니다.
'Memo > etc' 카테고리의 다른 글
You have deprecated linting or formatting settings for Python. Please see the logs for more details. (1) | 2023.12.06 |
---|---|
캡처 및 스위치 단축키 변경하기 | 윈도우 사용자를 위한 효율적인 작업 환경 구성: PowerToys로 맥의 단축키 패턴 사용하기 (1) | 2023.12.04 |
잇다 꾸러미를 소개합니다! (0) | 2023.11.02 |
Obsidian Clipper (0) | 2023.09.24 |
YouTube 링크 업데이트에 대한 공지 (0) | 2023.08.13 |