Introducción
Este tutorial demuestra cómo crear superficies 3D utilizando una malla triangular en la biblioteca Matplotlib de Python. Muestra dos ejemplos de trazado de superficies con malla triangular.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Importar las bibliotecas necesarias
Comenzamos importando las bibliotecas necesarias: matplotlib.pyplot y numpy. También importamos matplotlib.tri para crear las mallas triangulares.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as mtri
Crear una malla
Creamos una malla en el espacio de las variables de parametrización u y v. Esto se hace utilizando la función np.meshgrid() para crear una cuadrícula de puntos u y 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()
Definir la superficie
A continuación, definimos la superficie. En este ejemplo, usamos una transformación de Möbius para tomar un par u, v y devolver una triple 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)
Triangulación del espacio de parámetros
Triangulamos el espacio de parámetros para determinar los triángulos que conectarán los puntos x, y, z.
tri = mtri.Triangulation(u, v)
Graficar la superficie
Finalmente, graficamos la superficie utilizando la función plot_trisurf(). Los triángulos en el espacio de parámetros determinan qué puntos x, y, z están conectados por un borde.
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)
Crear una máscara
En este ejemplo, creamos una máscara para eliminar triángulos no deseados. Primero creamos los espacios de parámetros radii (radio) y angles (ángulos).
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
Mapear a los puntos x, y, z
Mapeamos los pares radius (radio), angle (ángulo) a los puntos x, y, z.
x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
z = (np.cos(radii)*np.cos(3*angles)).flatten()
Crear la triangulación
Creamos la triangulación utilizando la función Triangulation(). Dado que no hay triángulos, se crea la triangulación de Delaunay.
triang = mtri.Triangulation(x, y)
Ocultar triángulos no deseados
Ocultamos los triángulos no deseados calculando el punto medio de cada triángulo y comprobando si se encuentra dentro de un radio dado.
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)
Graficar la superficie
Finalmente, graficamos la superficie utilizando la función plot_trisurf().
ax = plt.figure().add_subplot(projection='3d')
ax.plot_trisurf(triang, z, cmap=plt.cm.CMRmap)
Resumen
Este tutorial demostró cómo crear superficies tridimensionales utilizando una malla triangular en la biblioteca Matplotlib de Python. Cubrimos los pasos implicados en la creación de una malla, la definición de la superficie, la triangulación del espacio de parámetros, la creación de una máscara y la representación de la superficie.