Gifs com Python e Geometria analítica
Representar dados de forma simples, projetar objetos tridimensionais e preparar o arquivo STL dos mesmos para impressão 3D; classificar amostras com características numéricas, brincar com espirógrafos e mensurar áreas de lugares em qualquer lugar do nosso planeta terra; é possível fazer tudo isso com apenas duas coias: Geometria Analítica e Python!
Esse post faz parte de uma série de tutoriais com o objetivo de apresentar aplicações da geometria analítica no mundo real, disciplina esta vista nos primeiros semestres de um curso de graduação em ciências exatas e tecnológicas.
Neste post aprenderemos como criar um GIF com superfícies 3D obtidas de equações da geometria analítica. As imagens são geradas com a linguagem de programação Python.
Recomendamos a leitura para alunos do ensino superior que estejam fazendo, ou já tenham feito, a disciplina de geometria analítica.
Este tutorial está dividido nas seguintes seções:
- Primeira superfície
- Personalizações
- Salvando figuras
- Criando o GIF
- Criando super GIF’s
Todos os códigos neste tutorial são imagens, portanto não é possível copiá-los diretamente. Mas caso o leitor queira reproduzir o tutorial pode encontrar os códigos copiáveis no meu Github clicando aqui!
Primeira superfície
Para fazer uma superfície em Python são necessários basicamente os seguintes passos:
- Importar as bibliotecas
- Definir os parâmetros
- Definir as equações
- Criar o gráfico
Vejamos como fica cada uma das partes separadamente:
Os códigos acima importam as funções e bibliotecas necessárias para a criação do gráfico. Este sempre é o primeiro passo na grande maioria dos projetos envolvendo programação.
Neste segundo bloco definimos os parâmetros u e v, bem como criamos uma grade de parâmetros (linha 4). Estes parâmetros serão usados nas equações paramétricas que definem a superfície. Neste exemplo u e v variam de 0 a 2 π. Essa variação é dividida em 200 iterações.
Na célula 3 do notebook definimos as equações paramétricas para cada uma das variáveis x, y e z. Neste exemplo usamos as equações paramétricas da esfera. Em posse das equações é possível fazer gráficos de diferentes tipos de superfícies.
Por fim, dizemos que queremos fazer um gráfico 3D (linha 2), fazemos o gráfico (linha 3) e mostramos ele na tela (linha 4).
O resultado é apresentado na figura acima.
Personalizações
O gráfico precisa de algumas personalizações. Os números das marcações dos eixos estão uns sobre os outros e não dá pra saber quais eixos são x, y e z. Aprenderemos alguns comandos que trarão mais estética ao nosso gráfico.
Todos os códigos que serão apresentados nessa seção são colocado entre as linhas 3 e 4 do último bloco de código.
Se quisermos colocar rótulos:
As linhas 6, 7 e 8 colocam rótulos nos eixos x, y e z respectivamente.
Reduzimos a quantidade de marcações apresentadas nos eixos, usando Ticks:
A linha 6 diz que no eixo x não tem marcações. A linha 7 diz que no eixo y, não tem marcações. A linha 8 diz que no eixo z devem aparecer apenas as marcações -1, -0.5, 0, 0.5, e 1. Temos um resultado como o abaixo:
Para mudar qual intervalo das marcações de cada eixo, use o seguinte:
Linha 6 diz que x vai de -2 a 2, linha 7 diz que y vai de -2 a 2 e linha 8 diz que z vai de -1 a 1. Como mudamos as escalas dos eixos, nossa esfera se parecerá, visualmente, com um elipsoide.
Para colocar título:
Para mudar o ângulo de apresentação do gráfico:
Dentro da função plot_surface é possível passar algumas personalizações como cor e transparência.
Obtendo o seguinte resultado:
Podemos combinar todas essas personalizações e obter resultados bem interessantes.
Salvando figuras
Nessa seção salvaremos nossos gráficos no nosso computador.
O código acima é parecido com o anterior tendo apenas algumas diferenças: a linha 12 diz o nome do arquivo que será salvo e a linha 15 salva o gráfico com o nome dado.
Usaremos agora repetição para salvar 3 figuras.
A primeira linha guarda na variável total o número total de vezes que repetiremos o código identado. A variável num assume os valores de 0 até total -1. Logo num assume os valores 0, 1 e 2. Observe que o nome do arquivo depende da variável num.
Essas já são as imagens para fazermos nosso GIF.
Criando o GIF
Na seção anterior vimos como usar estrutura de repetição para gerar três imagens para o nosso GIF. No entanto, temos dois problemas: poucas imagens e imagens repetidas!
Para aumentar o número de imagens basta alterar o valor da variável total.
Para diversificar as imagens temos que mexer nas equações. Ao mexer nas equações, use a variável num para fazer alterações.
No exemplo acima, mudamos o parâmetro u fazendo com ele dependa da variável num. Assim, para cada num teremos uma imagem diferente:
Surgiram mais dois outros problemas: os eixos estão mudando de escala e as imagens estão mudando bruscamente, não dá pra fazer uma animação assim.
Para resolver o problema da mudança brusca, basta aumentar o total de imagens e fazer as alterações bem sutis.
Para resolver o problema das escalas dos eixos, basta fixar limitantes para os marcadores dos eixos.
Faremos agora 100 “pedaços” de uma esfera mantendo os limites dos marcadores dos eixos fixos:
Ok, vejamos o que foi salvo no nosso computador:
Para animar, basta usar um site como o Giphy.
Criando um super GIF
Sabemos como fazer gráficos de superfícies, como personalizá-las, como interagir com as propriedades da superfície e como salvar tudo isso para fazer um GIF! E agora?
Agora podemos nos divertir explorando conceitos da geometria analítica como rotações e translações.
Conclusão
Só para resumir o que aprendemos:
- Fazer gráficos de superfícies em Python
- Personalizar gráficos com cor, escala, transparência, rótulos e marcações
- Salvar gráficos como figura em formato .png
- Usar repetições em Python para fazer várias imagens
- Utilizar a variável de repetição para mudar formas, cores, ângulos e tamanho da superfície
Desafio
Explore os conceitos de rotação, translação e redimensionamento de quádricas através de GIFS animados!
Até a próxima e boa diversão! \o