Computação gráfica com Python
Como desenhar com Python usando a biblioteca Turtle
Conteúdo
- O que é computação gráfica
- A biblioteca turtle do Python
- Desenhando coisas com a Turtle
- Fazendo um quadrado
- Configurando a caneta da Turtle
- Comandos avançados
- Criando desenhos impossíveis sem computadores
- Criando desenhos ainda mais elaborados
- Criando animações simples
O que é computação gráfica
Segundo o Wikipedia: “A computação gráfica é a área da computação destinada à geração de imagens em geral — em forma de representação de dados e informação, ou em forma de recriação do mundo real”. De forma resumida, é a área de programação onde se desenha coisas. É claro não é algo tão simples, mas é bem divertido e interessante para se entender como alguma das imagens que aparecem em nossos computadores mostram funcionam.
A biblioteca Turtle do Python
A biblioteca Turtle do python é uma simples biblioteca de desenho baseada em uma “tartaruga” que podemos usar para criar desenhos simples. Para a usar basta adicionar o seu import no começo do script e criar uma “caneta”:
import turtle
p = turtle.Pen()
Executando esse código (que ainda não desenha nada) o próprio Python vai criar uma janela nativa no sistema operacional onde irão aparecer nossos desenhos. Execute e veja.
Bem… você terá visto uma janela aparecer e ir embora bem rápido. Ela terá aparecido por um frame (dependendo do seu monitor 1/60 de segundo), então vamos fazer com que a janela só vá embora quando “fecharmos” o programa. Para fazer isso no final do seu código adicione um input()
para que o programa só termine quando você apertar a tecla ENTER
. No final o seu programa ficará assim:
import turtle
p = turtle.Pen()
input()
Desenhando coisas com a Turtle
Se tiver executado o código mostrado anteriormente você terá visto uma janela em branco com uma seta preta no meio. Esta “seta preta” é na verdade a nossa “turtle” que irá desenhar pra gente. Para que ela comece a desenhar, você deve passar um comando pra ela, então coloque o seguinte antes da comando input()
no código:
p.forward(100)
Você verá que a sua turtle terá movido 100 pixels pra frente e desenho uma linha nesse caminho que andou. É assim que a turtle desenha. Quanto ela irá se mover pra frente dependo do valor que você passar como parâmetro pra função forward()
. Vamos ver alguns outros comandos, experimente eles:
p.forward(50) # Mover pra frente 50 pixels
p.right(90) # Virar pra direita em 90 graus
p.left(180) # Virar pra esquerda 180 graus
p.backward(50) # Mover pra trás 50 pixels
Fazendo um quadrado
Depois de experimentar um pouco, você já deve ter pego o jeito da Turtle. Agora para um desafio:
Faça a sua turtle desenhar um quadrado completo. Exemplo
Aqui está uma solução pro problema:
p.forward(100)
p.right(90)
p.forward(100)
p.right(90)
p.forward(100)
p.right(90)
p.forward(100)
p.right(90)
Configurando a caneta da Turtle
Agora que você já desenhou um pouco mais, vamos ver algumas das funções para configurar a “caneta” da turtle:
p.pencolor("red") # Muda a cor da caneta
p.speed("fastest") # Muda a velocidade de desenho
p.pensize(2) # Muda o tamanho da caneta
Comandos avançados
E é claro, existem várias funções para se criar desenhos mais avançados:
p.goto(0, 0) # Move a tartaruga para um local específico da tela
p.circle(100) # Cria um círculo para você com diâmetro definido como parâmetro
Criando desenhos impossíveis sem computadores
Agora você já deve ter percebido que é mais fácil criar desenhos com papel e caneta do que com o computador. Então por que existe computação gráfica? Bem:
- Motivo nº1: Porque ainda precisamos desenhar coisas no computador…
- Motivo nº2: Porque com ela podemos desenhar coisas que seriam praticamente impossíveis com um papel e caneta (ou pelo menos terrívelmente difíceis)
Vamos fazer um desses desenhos difíceis, primeiramente vamos criar um círculo sem a função circle()
da turtle:
for i in range(360):
p.right(1)
p.forward(1)
Agora a turtle começou a agir de maneira estranha e interessante. Vamos melhorar isso, troque a quantidade de graus que a turtle irá virar para um número maior, como 50
e faça com que ao invés da turtle se mover 1 pixel pra frente ela se mova i
pixels. E para ser mais interessante, altere a quantidade do loop para 1000
:
for i in range(1000):
p.right(50)
p.forward(i)
Agora experimente com isso, tente alterer o valor de quanto a turtle irá virar em graus por rodada no loop. Ou então aplique uma operação matemática encima dos números para ver o que acontece, ou tente algumas das outras funções que viu até agora. Agora é hora de experimentar:
for i in range(50):
p.circle(i)
p.right(10)
Criando desenhos ainda mais elaborados
Usando o poder das listas e condicionais temos o potencial de criar desenhos ainda mais interessantes. O exemplo a seguir eu crio uma lista de cores colors
, que segura quais cores irei usar em meu desenho. Faço o desenho como antes, mas a cada rodada do loop a cor é trocada e um condicional faz com que troquemos a cor com segurança:
colors = ["red", "green", "blue"]
colorIndex = 0
for i in range(360):
p.pencolor(colors[colorIndex])
p.forward(i)
p.right(100)
if colorIndex < len(colors) - 1:
colorIndex += 1
else:
colorIndex = 0
Criando animações simples
Isso não seria uma aula de computação gráfica completa sem animações, para fazer animações é bem simples. Basta fazer um desenho, apagar tudo o que tiver na tela e desenhar de novo em uma nova posição. Simples assim. Para se apagar um desenho com a turtle basta chamar a função p.clear()
. Agora um exemplo:
count = 0
for i in range(10000):
p.forward(i)
p.right(145)
if count == 5:
p.clear() # Apaga tudo o que estiver desenhado até agora
count = 0
count += 1