Mais Superfícies 3D Triangulares

Beginner

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

Introdução

Este tutorial demonstra como criar superfícies 3D usando malha triangular na biblioteca Matplotlib do Python. Ele mostra dois exemplos de plotagem de superfícies com malha triangular.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar as Bibliotecas Necessárias

Começamos importando as bibliotecas necessárias: matplotlib.pyplot e numpy. Também importamos matplotlib.tri para criar as malhas triangulares.

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

Criar uma Malha

Criamos uma malha no espaço das variáveis de parametrização u e v. Isso é feito usando a função np.meshgrid() para criar uma grade de pontos u e 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 a Superfície

Em seguida, definimos a superfície. Neste exemplo, usamos um mapeamento de Möbius para pegar um par u, v e retornar um triplo 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)

Triangulação do Espaço Paramétrico

Triangulamos o espaço paramétrico para determinar os triângulos que conectarão os pontos x, y, z.

tri = mtri.Triangulation(u, v)

Plotar a Superfície

Finalmente, plotamos a superfície usando a função plot_trisurf(). Os triângulos no espaço paramétrico determinam quais pontos x, y, z são conectados por uma aresta.

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)

Criar uma Máscara

Neste exemplo, criamos uma máscara para remover triângulos indesejados. Primeiro, criamos os espaços paramétricos radii e 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

Mapear para os Pontos x, y, z

Mapeamos os pares radius, angle para os pontos x, y, z.

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

Criar a Triangulação

Criamos a triangulação usando a função Triangulation(). Como não há triângulos, a triangulação de Delaunay é criada.

triang = mtri.Triangulation(x, y)

Mascar Triângulos Indesejados

Mascaramos os triângulos indesejados calculando o ponto médio de cada triângulo e verificando se ele se enquadra em um raio 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)

Plotar a Superfície

Finalmente, plotamos a superfície usando a função plot_trisurf().

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

Resumo

Este tutorial demonstrou como criar superfícies 3D usando malhas triangulares na biblioteca Matplotlib do Python. Cobrimos as etapas envolvidas na criação de uma malha, definição da superfície, triangulação do espaço de parâmetros, criação de uma máscara e plotagem da superfície.