Conteúdo

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:

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