Matplotlib-Triangulation

Shiv Yadav 15 Februar 2024
Matplotlib-Triangulation

Das Matplotlib-Toolkit von Python ist vollständig zum Erstellen statischer, animierter und interaktiver Visualisierungen. Es macht schwierige Dinge möglich, wie z. B. das Erstellen von Diagrammen, die für die Veröffentlichung geeignet sind, und das Erstellen interaktiver Diagramme mit Zoom-, Schwenk- und Aktualisierungsfunktionen.

Matplotlib-Triangulation

Um die Triangulation zu plotten, bietet Matplotlib Bibliotheken und Funktionen an. Eine Fläche oder ein ebenes Polygon wird auf diese Weise in mehrere Dreiecke unterteilt.

Typischerweise wird jede Dreiecksspitze von zwei benachbarten Dreiecken geteilt.

Die Fähigkeit von Python, eine kontinuierliche Oberfläche zu zeichnen, wird durch die Triangulationsidee ermöglicht. Dreiecke können benutzerdefinierte Koordinaten haben oder die Sammlung von Punkten in einem Dreieck haben, das das von der Delaunay-Triangulation abgedeckte Oberflächendiagramm stützt.

Dieser Beitrag wird uns etwas über Matplotlib-Triangulation beibringen. Für die Darstellung der Triangulation ist die Funktion matplotlib.pyplot.triplot() notwendig, die mindestens zwei Argumente – x- und y-Datenpunkte – akzeptiert.

n Punkte und ntri Dreiecke bilden ein unstrukturiertes Dreiecksgitter.

Die Dreiecke können automatisch unter Verwendung einer Delaunay-Triangulation oder durch den Benutzer erstellt werden (erzeugen Sie ein Dreiecksnetz, das ein Objekt bedeckt).

Lassen Sie uns ein zufälliges Dreieck erstellen:

Zuerst müssen Sie die erforderlichen Bibliotheken wie Matplotlib, NumPy usw. importieren.

Bibliothek importieren

Während wir zufällige Dreiecke generieren, lassen Sie uns zuerst zufällige Daten für die Dreiecke generieren.

Zu Demonstrationszwecken wird der folgende Code verwendet, um eine zufällige Punktwolke zu erstellen:

Zufallsdaten generieren

Wir stellen sicher, dass die Triangulation echt ist, bevor wir die Daten für das Matplotlib-Triangulationsplot erstellen. Es darf keine Dreiecke enthalten, die aus kollinearen Punkten, identischen Punkten oder überlappenden Dreiecken bestehen.

Dreieck erzeugen

In der Funktion matplotlib.tri werden Dreiecke mit der Funktion triangulation() erzeugt, die mindestens zwei Parameter benötigt, x- und y-Datenpunkte.

Wir können die Triangulation mit der Methode matplotlib.pyplot.triplot() auf einer Figur darstellen.

Dreiecke anzeigen

Da die triangulierte Punktwolke zufällig erzeugt wird, sehen Sie bei jeder Ausführung des Skripts eine neue Triangulation.

Lassen Sie uns die Matplotlib-Triangulation in 3D-Räumen ausführen. In diesem Abschnitt zeichnen wir die Kugel mithilfe der Matplotlib-Triangulation.

Wir müssen die Kugel parametrisieren, um eine Kugel mit Triangulation zu zeichnen. Wir müssen das äußere Produkt der beiden Vektoren cos(a) und sin(b) auf der x-Achse, sin(a) und sin(b) auf der y-Achse und cos() auf der z-Achse (b).

Eine Liste von Zahlen mit gleichmäßigem Abstand von 0 bis ist in Spalte a angegeben, und eine Liste von Zahlen mit gleichem Abstand von 0 bis π ist in Spalte b angegeben.

Der folgende Code verwendet Matplotlib-Triangulation, um eine Kugel zu zeichnen:

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()

Zuerst importierten wir die benötigten Module und richteten die Figurengröße ein. Danach ändert ax = plt.figure().gca(projection='3d') die Figur von 2D auf 3D.

Die Methode numpy.linspace() erzeugte 30 gleichmäßig verteilte Zahlen für die Listen U und V. Die Funktion numpy.meshgrid() akzeptiert ein 1D-Array, das die Koordinaten eines Gitters codiert, als Eingabe und gibt die Koordinatenmatrizen aus dem Koordinatenvektor zurück.

Die Vektoren (cos(a) und sin(b)), (sin(a) und sin(b)) und (Array aus Einsen und cos(b)) ergaben entsprechend die listet S1, S2 und S3 auf.

Das triangulierte Kugeldiagramm wird mit der Funktion matplotlib.pyplot.show() angezeigt. Wenn der Parameter k zunimmt, werden mehr Punkte definiert, was zu kleineren Dreiecken und einer glatteren Kugel führt.

Das Ausführen des Codes führt zu folgendem Ergebnis:

Kugeldiagramm mit Triangulation Matplotlib

Autor: 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