sábado, 2 de janeiro de 2010

Fazer algo com pouco...

Suponhamos que temos uma definição que nos permite desenhar um segmento de recta:
1.from cTurtle import *
2. 
3.def segmento(tartaruga,pos1,pos2):
4.    """ traça um segmento  entre pos 1 e pos2."""
5.    tartaruga.pu()
6.    tartaruga.goto(pos1)
7.    tartaruga.pd()
8.    tartaruga.goto(pos2)

Executando o código:
1.if __name__ == '__main__':
2.    tarta = Turtle()
3.    tarta.setheading(90)
4.    inicio = (0,0)
5.    fim = (100,100)
6.    segmento(tarta, inicio,fim)
7.    tarta.exitOnClick()

obtemos a imagem:





Note-se como a orientação da caneta, que foi colocada a 90 graus, se manteve. Podemos aliás ver todas as propriedades da caneta socorrendo-nos do comando pen():

1.>>>  print tarta.pen()
2.{'pensize': 1, 'shown': True, 'resizemode': 'auto', 'fillcolor': '', 'stretchfactor': 1, 'speed': 3,
3.'pendown': True, 'pencolor': 'black', 'outline': 1}
4.>>>

Como se pode ver as propriedades da caneta estão guardadas num dicionário ... e podem ser alteradas. Por exemplo, fazendo:

tarta.pen(pencolor='red',pensize = 5, outline = 3)
obtemos a imagem:





Com a capacidade de desenhar segmentos podemos obter formas. Por exemplo, um triângulo:
1.def tri(tartaruga,p1,p2,p3):
2.    segmento(tartaruga,p1,p2)
3.    segmento(tartaruga,p2,p3)
4.    segmento(tartaruga,p3,p1)






E se quisermos um quadrado, ou um pentágono? Bom, uma solução é usar uma definição que envolve a lista dos pontos e através de um ciclo for ir juntado de modo ordenado os pontos dois a dois. Podemos também usar a notação *objecto. Deste modo podemos também passar como argumentos um número variável de pontos:
1.def formas(tartaruga, *pontos):
2.    for i in range(len(pontos)-1):
3.        segmento(tartaruga, pontos[i], pontos[i+1])
4.    segmento(tartaruga,pontos[-1], pontos[0])

Para garantir que a figura é fechada temos que juntar no final o último ponto ao primeiro!

Podemos fazer muitas variações sobre este tema. Por exemplo, encher com cor:
1.def formas(tartaruga, cor, *pontos):
2.    tarta.begin_fill()
3.    tarta.fillcolor(cor)
4.    for i in range(len(pontos)-1):
5.        segmento(tartaruga, pontos[i], pontos[i+1])
6.    segmento(tartaruga,pontos[-1], pontos[0])
7.    tarta.end_fill()





Agora é só puxar pela imaginação para fazer mais coisas.

Sem comentários:

Enviar um comentário