HOWTO · Matplotlib

Matplotlib 三角形分割

この投稿は、Matplotlib の三角形分割を理解するのに役立ちます。

このページの内容

Python の Matplotlib ツールキットは、静的、アニメーション、およびインタラクティブな視覚化を構築するための完全なツールです。 公開に適したプロットの作成や、ズーム、パン、更新機能を備えたインタラクティブなグラフの作成など、難しいことが可能になります。

Matplotlib 三角形分割

三角形分割をプロットするために、Matplotlib にはライブラリと関数が用意されています。 サーフェスまたはプレーン ポリゴンは、このようにいくつかの三角形に分割されます。

通常、各三角形の頂点は、隣接する 2つの三角形によって共有されます。

連続サーフェスをプロットする Python の機能は、三角形分割のアイデアによって有効になります。 三角形は、ユーザー定義の座標を持つことも、ドローネ三角形分割によってカバーされる表面プロットを維持する三角形内の点のコレクションを持つこともできます。

この投稿では、Matplotlib の三角形分割について説明します。 関数 matplotlib.pyplot.triplot() は、少なくとも 2つの引数 (x と y のデータ ポイント) を受け入れ、三角測量をプロットするために必要です。

n点とntri三角形は、構造化されていない三角形グリッドを形成します。

三角形は、ドロネー三角形分割を使用して自動的に作成するか、ユーザーが指定することによって作成できます (オブジェクトを覆う三角形のメッシュを生成します)。

ランダムな三角形を作成しましょう:

まず、Matplotlib、NumPy などの必要なライブラリをインポートする必要があります。

インポート ライブラリ

ランダムな三角形を生成しているので、まず三角形のランダム データを生成しましょう。

デモンストレーションの目的で、次のコードを使用してランダムな点群を作成します。

ランダム データの生成

Matplotlib 三角測量プロットのデータを生成する前に、三角測量が本物であることを確認します。 同一線上の点、同一の点、または重なり合う三角形で構成される三角形を含めることはできません。

三角を生成

matplotlib.tri 関数では、関数 triangulation() を使用して三角形が生成されます。これには、少なくとも 2つのパラメーター x と y データ ポイントが必要です。

図に matplotlib.pyplot.triplot() メソッドを使用して三角形分割をプロットできます。

三角形を表示

三角形分割された点群はランダムに生成されるため、スクリプトが実行されるたびに新しい三角形分割が観察されます。

3D 空間で Matplotlib 三角形分割を実行してみましょう。 このセクションでは、Matplotlib 三角形分割を使用して球をプロットします。

三角形分割を使用して球を描画するには、球をパラメータ化する必要があります。 2つのベクトル cos(a)sin(b) を x 軸に、sin(a)sin(b) を y 軸に、そして z 軸上の cos() (b)。

a 列には 0 から までの等間隔の数字のリストが、列 b には 0 から π までの等間隔の数字のリストが示されています。

次のコードは、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)) は、対応して、 S1S2、および S3 をリストします。

三角球のプロットは、matplotlib.pyplot.show() 関数を使用して表示されます。 パラメータ k が大きくなると、より多くのポイントが定義され、三角形が小さくなり、球がより滑らかになります。

コードを実行すると、次のようになります。

三角測量 Matplotlib を使用した球プロット