Matplotlib 삼각 측량

Shiv Yadav 2024년2월15일
Matplotlib 삼각 측량

Python의 Matplotlib 도구 키트는 정적, 애니메이션 및 대화형 시각화를 구축하는 데 적합합니다. 게시에 적합한 플롯을 생성하고 확대/축소, 이동 및 업데이트 기능이 있는 대화형 차트를 만드는 것과 같은 어려운 작업을 가능하게 합니다.

Matplotlib 삼각 측량

삼각 측량을 그리기 위해 Matplotlib는 라이브러리와 함수를 제공합니다. 표면 또는 평면 다각형은 이러한 방식으로 여러 삼각형으로 나뉩니다.

일반적으로 각 삼각형 꼭지점은 두 개의 인접한 삼각형이 공유합니다.

연속적인 표면을 그리는 Python의 기능은 삼각 측량 아이디어를 통해 활성화됩니다. 삼각형은 사용자 정의 좌표를 가질 수 있거나 Delaunay 삼각 분할에 의해 커버되는 표면 플롯을 유지하는 삼각형의 점 모음을 가질 수 있습니다.

이 게시물은 Matplotlib 삼각 측량에 대해 알려줍니다. 함수 matplotlib.pyplot.triplot()은 최소한 두 개의 인수(x 및 y 데이터 포인트)를 허용하여 삼각 측량을 플로팅하는 데 필요합니다.

n 점과 ntri 삼각형은 구조화되지 않은 삼각형 그리드를 형성합니다.

삼각형은 Delaunay 삼각 측량을 사용하거나 사용자가 지정하여 자동으로 생성할 수 있습니다(객체를 덮는 삼각형 메쉬 생성).

임의의 삼각형을 만들어 봅시다.

먼저 Matplotlib, NumPy 등과 같은 필수 라이브러리를 가져와야 합니다.

라이브러리 가져오기

임의 삼각형을 생성할 때 먼저 삼각형에 대한 임의 데이터를 생성해 보겠습니다.

데모 목적으로 다음 코드를 사용하여 임의의 포인트 클라우드를 생성합니다.

랜덤 데이터 생성

Matplotlib 삼각 분할 플롯에 대한 데이터를 생성하기 전에 삼각 분할이 진짜인지 확인합니다. 동일 선상의 점, 동일점 또는 겹치는 삼각형으로 구성된 삼각형은 포함할 수 없습니다.

삼각형 생성

matplotlib.tri 함수에서 triangulation() 함수를 사용하여 삼각형을 생성합니다. 여기에는 최소 두 개의 매개변수 x 및 y 데이터 포인트가 필요합니다.

그림에서 matplotlib.pyplot.triplot() 메서드를 사용하여 삼각분할을 그릴 수 있습니다.

삼각형 표시

삼각 측량된 점 구름이 무작위로 생성되므로 스크립트가 실행될 때마다 새로운 삼각 측량이 관찰됩니다.

3D 공간에서 Matplotlib 삼각분할을 실행해 봅시다. 이 섹션에서는 Matplotlib 삼각 측량을 사용하여 구를 플로팅합니다.

구면을 그리려면 삼각화를 사용하여 구를 매개변수화해야 합니다. 두 벡터 cos(a)sin(b)를 x-축에 대해, sin(a)sin(b)를 y-축에 대해, 그리고 z-축(b)에 대해 cos()의 외적을 수행해야 합니다.

0에서 까지 균일한 간격의 숫자 목록은 a 열에 제공되고 0에서 π까지 균일한 간격의 숫자 목록은 b 열에 제공됩니다.

다음 코드는 Matplotlib 삼각분할을 사용하여 구를 그립니다.

import numpy as np
from scipy.spatial import Delaunay
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

ax = plt.figure().gca(projection="3d")


def triangulateSphere(ax, k=30, cmap=cm.magma):

    # domain parametrization
    U = np.linspace(0, 2 * np.pi, k)
    V = np.linspace(0, np.pi, k)
    [X, Y] = np.meshgrid(U, V)

    # sphere parametrization
    S1 = np.cos(X) * np.sin(Y)
    S2 = np.sin(X) * np.sin(Y)
    S3 = np.cos(Y)

    # triangulate the points in [0,2pi] x [0,pi]
    tri = Delaunay(np.array([X.flatten(), Y.flatten()]).T)

    # plot the sphere
    ax.plot_trisurf(
        S1.flatten(), S2.flatten(), S3.flatten(), triangles=tri.simplices, cmap=cmap
    )


triangulateSphere(ax)
plt.show()

먼저 필요한 모듈을 가져와 그림 크기를 설정했습니다. 그 후 ax = plt.figure().gca(projection='3d')는 그림을 2D에서 3D로 변경합니다.

numpy.linspace() 메서드는 UV 목록에 대해 30개의 균등 간격 숫자를 생성했습니다. numpy.meshgrid() 함수는 그리드의 좌표를 인코딩하는 1D 배열을 입력으로 받아들이고 좌표 벡터에서 좌표 행렬을 반환합니다.

벡터 (cos(a)sin(b)), (sin(a)sin(b)) 및 (1 및 cos(b)의 배열)은 그에 따라 S1, S2S3을 나열합니다.

삼각형 구 플롯은 matplotlib.pyplot.show() 함수를 사용하여 표시됩니다. 매개변수 k가 증가함에 따라 더 많은 점이 정의되어 삼각형이 더 작아지고 구가 더 부드러워집니다.

코드를 실행하면 다음과 같은 결과가 나타납니다.

삼각 측량 Matplotlib를 사용한 구 플롯

작가: Shiv Yadav
Shiv Yadav avatar Shiv Yadav avatar

Shiv is a self-driven and passionate Machine learning Learner who is innovative in application design, development, testing, and deployment and provides program requirements into sustainable advanced technical solutions through JavaScript, Python, and other programs for continuous improvement of AI technologies.

LinkedIn