Introduction
Ce tutoriel montre comment créer des surfaces 3D à l'aide d'un maillage triangulaire dans la bibliothèque Matplotlib de Python. Il présente deux exemples de tracé de surfaces avec un maillage triangulaire.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter pour pratiquer.
Parfois, vous devrez attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Importation des bibliothèques requises
Nous commençons par importer les bibliothèques requises : matplotlib.pyplot et numpy. Nous importons également matplotlib.tri pour créer les maillages triangulaires.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as mtri
Créer un maillage
Nous créons un maillage dans l'espace des variables de paramétrisation u et v. Cela est fait à l'aide de la fonction np.meshgrid() pour créer une grille de points u et v.
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()
Définir la surface
Ensuite, nous définissons la surface. Dans cet exemple, nous utilisons une transformation de Möbius pour prendre une paire u, v et retourner un triplet x, y, z.
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)
Trianguler l'espace de paramètres
Nous triangulons l'espace de paramètres pour déterminer les triangles qui connecteront les points x, y, z.
tri = mtri.Triangulation(u, v)
Tracer la surface
Enfin, nous traçons la surface à l'aide de la fonction plot_trisurf(). Les triangles dans l'espace de paramètres déterminent quels points x, y, z sont connectés par un bord.
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)
Créer un masque
Dans cet exemple, nous créons un masque pour éliminer les triangles indésirables. Nous créons d'abord les espaces de paramètres rayons et 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
Projeter sur les points x, y, z
Nous projetons les paires rayon, angle sur les points x, y, z.
x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
z = (np.cos(radii)*np.cos(3*angles)).flatten()
Créer une triangulation
Nous créons la triangulation à l'aide de la fonction Triangulation(). Étant donné qu'il n'y a pas de triangles, la triangulation de Delaunay est créée.
triang = mtri.Triangulation(x, y)
Masquer les triangles indésirables
Nous masquons les triangles indésirables en calculant le point milieu de chaque triangle et en vérifiant si celui-ci se trouve à l'intérieur d'un rayon donné.
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)
Tracer la surface
Enfin, nous traçons la surface à l'aide de la fonction plot_trisurf().
ax = plt.figure().add_subplot(projection='3d')
ax.plot_trisurf(triang, z, cmap=plt.cm.CMRmap)
Sommaire
Ce tutoriel a démontré comment créer des surfaces 3D à l'aide d'un maillage triangulaire dans la bibliothèque Matplotlib de Python. Nous avons couvert les étapes impliquées dans la création d'un maillage, la définition de la surface, la triangulation de l'espace de paramètres, la création d'un masque et le tracé de la surface.