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:

from cTurtle import *

def segmento(tartaruga,pos1,pos2):
""" traça um segmento entre pos 1 e pos2."""
tartaruga.pu()
tartaruga.goto(pos1)
tartaruga.pd()
tartaruga.goto(pos2)

Executando o código:

if __name__ == '__main__':
tarta = Turtle()
tarta.setheading(90)
inicio = (0,0)
fim = (100,100)
segmento(tarta, inicio,fim)
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():


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

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:

def tri(tartaruga,p1,p2,p3):
segmento(tartaruga,p1,p2)
segmento(tartaruga,p2,p3)
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:

def formas(tartaruga, *pontos):
for i in range(len(pontos)-1):
segmento(tartaruga, pontos[i], pontos[i+1])
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:

def formas(tartaruga, cor, *pontos):
tarta.begin_fill()
tarta.fillcolor(cor)
for i in range(len(pontos)-1):
segmento(tartaruga, pontos[i], pontos[i+1])
segmento(tartaruga,pontos[-1], pontos[0])
tarta.end_fill()





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

Sem comentários:

Enviar um comentário