terça-feira, 15 de outubro de 2013

Dominar a cor

Numa das últimas aulas resolvemos o problema de desenhar quatro quadrados concêntricos, com o bordo com uma cor pré-determinada.

import turtle

def quadrado(posx, posy,lado,cor):
    turtle.penup()
    turtle.goto(posx,posy)
    turtle.pendown()
    turtle.pencolor(cor)
    for i in range(4):
        turtle.forward(lado)
        turtle.left(90)
    turtle.hideturtle()     
        
def quadrados(posx, posy,lado,incremento):
    quadrado(posx,posy,lado,'red')
    quadrado(posx-incremento/2,posy - incremento/2,lado+incremento,'blue')
    quadrado(-20,-20,60,'green')
    quadrado(-30,-30,80,'black')
        
if __name__ == '__main__':
    quadrados()
    turtle.exitonclick()
Trata-se de uma solução simples e modular que tem no seu centro a capacidade de desenhar quadrados numa dada posição, com um dado lado e cor. Não é muito interessante como solução. Em particular estamos a chamar em sequência a função quadrado tendo o cuidado de calcular os seus argumentos. E se forem dez e não quatro. Vamos ver como podemos escolher as cores, guardando-as num tuplo para posterior escolha. Apresentamos dois casos. As cores são escolhidas por ordem e quase se esgotam voltamos ao início. Ou as são escolhidas aleatoriamente de entre as possíveis.
import turtle
import random

def quadrado(posx,posy,angulo,lado, cor):
    # Prepara
    turtle.penup()
    turtle.goto(posx,posy)
    turtle.pendown()
    turtle.setheading(angulo)
    turtle.pencolor(cor)
    # Desenha
    for i in range(4):
        turtle.forward(lado)
        turtle.left(90)
    turtle.hideturtle()
    
def quad_concent(num, lado, incremento, posx,posy, angulo):
    # Prepara
    turtle.penup()
    turtle.goto(posx, posy)
    turtle.pendown()
    turtle. setheading(angulo)
    # Cores
    cores = ('red','green','blue','yellow','pink','orange','black')
    for i in range(num):
        cor = cores[i%len(cores)] # <-- Percebe para que serve?
        quadrado(posx,posy,angulo,lado,cor)
        posx = posx - incremento/2
        posy = posy - incremento/2
        lado = lado + incremento
  

    
def quad_concent_b(num, lado, incremento, posx,posy, angulo):
    # Prepara
    turtle.penup()
    turtle.goto(posx, posy)
    turtle.pendown()
    turtle. setheading(angulo)
    # Cores
    cores = ('red','green','blue','yellow','pink','orange','black')
    for i in range(num):
        indice = random.randint(0,len(cores)-1)
        cor = cores[indice]
        quadrado(posx,posy,angulo,lado,cor)
        posx = posx - incremento/2
        posy = posy - incremento/2
        lado = lado + incremento
        
        
        
if __name__ == '__main__':
    #quad_concent(10,30,15,0,0,0)
    quad_concent_b(10,30,15,0,0,0)
    turtle.exitonclick()
O código ilustra as duas possibilidades. Experimente você mesmo não se esquecendo de explorar as diferentes alternativas.

Sem comentários:

Enviar um comentário