Weitere Dreieckige 3D-Flächen

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial wird gezeigt, wie man mit Hilfe der Matplotlib-Bibliothek in Python 3D-Oberflächen mit Hilfe von Dreiecksnetzen erstellt. Es werden zwei Beispiele zur Darstellung von Oberflächen mit Dreiecksnetzen gezeigt.

Tipps für die VM

Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der linken oberen Ecke, um zur Registerkarte Notebook zu wechseln und den Jupyter Notebook-Server für die Übungen zu starten.

Manchmal müssen Sie einige Sekunden warten, bis der Jupyter Notebook-Server vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen des Jupyter Notebook-Servers nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby um Hilfe bitten. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie schnellstmöglich beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("Importing Matplotlib") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("Understanding Figures and Axes") python/BasicConceptsGroup -.-> python/booleans("Booleans") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills matplotlib/importing_matplotlib -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} matplotlib/figures_axes -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} python/booleans -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} python/lists -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} python/tuples -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} python/importing_modules -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} python/numerical_computing -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} python/data_visualization -.-> lab-49012{{"Weitere Dreieckige 3D-Flächen"}} end

Importieren der erforderlichen Bibliotheken

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken: matplotlib.pyplot und numpy. Wir importieren auch matplotlib.tri, um die Dreiecksnetze zu erstellen.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as mtri

Erstellen eines Gitters

Wir erstellen ein Gitter im Raum der Parameterisierungsvariablen u und v. Dies wird mit der Funktion np.meshgrid() durchgeführt, um ein Gitter von u- und v-Punkten zu erstellen.

u = np.linspace(0, 2.0 * np.pi, endpoint=True, num=50)
v = np.linspace(-0.5, 0.5, endpoint=True, num=10)
u, v = np.meshgrid(u, v)
u, v = u.flatten(), v.flatten()

Definieren der Fläche

Als nächstes definieren wir die Fläche. In diesem Beispiel verwenden wir eine Möbiustransformation, um ein u-v-Paar zu nehmen und ein x-y-z-Tripel zurückzugeben.

x = (1 + 0.5 * v * np.cos(u / 2.0)) * np.cos(u)
y = (1 + 0.5 * v * np.cos(u / 2.0)) * np.sin(u)
z = 0.5 * v * np.sin(u / 2.0)

Dreiecksgitter des Parametersraums

Wir erstellen ein Dreiecksgitter im Parametersraum, um die Dreiecke zu bestimmen, die die x, y, z-Punkte verbinden werden.

tri = mtri.Triangulation(u, v)

Zeichnen der Fläche

Schließlich zeichnen wir die Fläche mit der Funktion plot_trisurf(). Die Dreiecke im Parametersraum bestimmen, welche x, y, z-Punkte durch eine Kante verbunden sind.

ax = plt.figure().add_subplot(projection='3d')
ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap=plt.cm.Spectral)
ax.set_zlim(-1, 1)

Erstellen einer Maske

In diesem Beispiel erstellen wir eine Maske, um unerwünschte Dreiecke zu entfernen. Wir erstellen zunächst die Parametersräume radii und angles.

n_angles = 36
n_radii = 8
min_radius = 0.25
radii = np.linspace(min_radius, 0.95, n_radii)

angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
angles[:, 1::2] += np.pi/n_angles

Abbilden auf x, y, z-Punkte

Wir projizieren die radius-angle-Paare auf x, y, z-Punkte.

x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
z = (np.cos(radii)*np.cos(3*angles)).flatten()

Erstellen der Triangulation

Wir erstellen die Triangulation mit der Funktion Triangulation(). Da es keine Triangeln gibt, wird eine Delaunay-Triangulation erstellt.

triang = mtri.Triangulation(x, y)

Ausschließen unerwünschter Dreiecke

Wir schließen unerwünschte Dreiecke aus, indem wir den Mittelpunkt jedes Dreiecks berechnen und überprüfen, ob er innerhalb eines angegebenen Radius liegt.

xmid = x[triang.triangles].mean(axis=1)
ymid = y[triang.triangles].mean(axis=1)
mask = xmid**2 + ymid**2 < min_radius**2
triang.set_mask(mask)

Zeichnen der Fläche

Schließlich zeichnen wir die Fläche mit der Funktion plot_trisurf().

ax = plt.figure().add_subplot(projection='3d')
ax.plot_trisurf(triang, z, cmap=plt.cm.CMRmap)

Zusammenfassung

In diesem Tutorial wurde gezeigt, wie man mit Hilfe der Matplotlib-Bibliothek in Python 3D-Flächen mit Hilfe von Dreiecksnetzen erstellt. Wir haben die Schritte behandelt, die bei der Erstellung eines Gitters, der Definition der Fläche, der Triangulation des Parametersraums, der Erstellung einer Maske und der Darstellung der Fläche involviert sind.