>백엔드 개발 >파이썬 튜토리얼 >Python에서 볼록 껍질을 그리는 방법은 무엇입니까?

Python에서 볼록 껍질을 그리는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-05-08 19:25:061880검색

ConvexHull

ConvexHull은 공간 클래스의 주요 기능은 점 집합의 가장자리를 찾아 볼록 껍질을 만드는 것입니다. 필요한 초기화 매개변수는 점 세트이고, 점 세트 형식은 n×m 차원의 배열이고, n은 점 세트의 점 수이고, m은 점의 차원입니다.

from scipy.spatial import ConvexHull
import matplotlib.pyplot as plt
import numpy as np

pts = np.random.rand(30, 2)
hull = ConvexHull(pts)
plt.plot(pts[:,0], pts[:,1], 'o')
for i in hull.simplices:
    plt.plot(pts[i, 0], pts[i, 1], 'k-')

plt.show()

여기서 simplex는 인덱스 포인트의 일련 번호입니다. 그리기 후 효과는 다음과 같습니다.

Python에서 볼록 껍질을 그리는 방법은 무엇입니까?

ConvexHull에는 두 개의 선택적 매개 변수가 있습니다. True인 경우 새 포인트를 추가할 수 있습니다. .

qhull_options의 특정 매개변수는 qhull에서 볼 수 있습니다. 아래에서는 QG만 설명하겠습니다.

QG

QGn은 n번째 지점을 관측점으로 간주한다는 뜻으로 볼록선체로 설정된 점을 분할한 후 정점을 연결하여 벽으로 사용하면 관측점으로 볼 수 있는 점은 다음과 같습니다. 좋음으로 표시되면 효과는 아래와 같습니다

pts = np.random.rand(1000, 2)
# 添加一个观察点
pts = np.vstack([pts, np.array([[2,0.5]])])
hull = ConvexHull(pts, qhull_options='QG1000')
plt.plot(pts[:,0], pts[:,1], '.')
for i in hull.simplices:
    plt.plot(pts[i, 0], pts[i, 1], 'k-')

for i in hull.simplices[hull.good]:
    plt.plot(pts[i, 0],pts[i, 1], lw=5)

plt.show()

효과는 그림과 같습니다

Python에서 볼록 껍질을 그리는 방법은 무엇입니까?

3차원 케이스

2차원 케이스의 볼록한 선체는 분명히 선으로 구성된 닫힌 도형이며, 3차원 경우의 볼록 선체는 당연히 3차원 형상이어야 합니다. 어떤 차원으로든 확장된 볼록 껍질은 실제로 단순체입니다. ConvexHull의 단순체는 단순체를 형성하는 점이며 원점 세트에 색인되어 있습니다. 그 예는 다음과 같습니다

pts = np.random.rand(30, 3)
hull = ConvexHull(pts)
ax = plt.subplot(projection='3d')
ax.scatter(pts[:,0], pts[:,1], pts[:,2])
for i in hull.simplices:
    ax.plot_trisurf(pts[i, 0], pts[i, 1], pts[i,2], alpha=0.5)

plt.show()

알파 매개변수는 삼각형 표면의 투명도를 조정하여 볼록 껍질 내부의 점이 볼록 껍질을 통해 보이도록 하는 데 사용됩니다.

효과는 다음과 같습니다

Python에서 볼록 껍질을 그리는 방법은 무엇입니까?

ConvexHull 속성

심플렉스(Simplex)의 개념은 앞서 소개한 바 있습니다. 즉, 볼록한 껍질로 구성된 도형이 심플렉스입니다. 2차원의 경우 볼록 껍질은 선분으로 둘러싸여 있으며, 3차원의 경우 볼록 껍질은 어떤 차원으로든 확장되어 둘러싸여 있는 볼록 껍질을 구성하는 단순체로 표현될 수 있습니다. 하이퍼서피스로. 초곡면 개념에는 경계가 없으므로 정점과 모서리가 있는 볼록 선체 표면을 다음에서는 단순 초곡면이라고 합니다.

ConvexHull 클래스에서 일반적으로 사용되는 속성은 다음과 같습니다.

  • 볼록 껍질로 둘러싸인 점 점 집합

  • 점 집합의 단순 정점 인덱스

  • 단순 초표면 정점

  • 이웃 슈퍼 표면 인접 초곡면의 인덱스

  • 방정식 초곡면 방정식의 매개변수

3차원 경우의 초곡면 방정식의 예는 다음과 같습니다. 즉, 각 초곡면에는 4개의 매개변수가 있습니다

>>> hull.equations
array([[-0.5509472 ,  0.72386104, -0.41530999, -0.36369123],
       [-0.26155355,  0.16210178, -0.95147925,  0.02022163],
       [-0.99132368, -0.0460725 ,  0.12310441,  0.045523  ],
       [-0.98526526, -0.07170442,  0.15527666,  0.04749854],
       [-0.15900968, -0.98529789, -0.06248198,  0.13294496],
   # .......

위 내용은 Python에서 볼록 껍질을 그리는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제