segunda-feira, 24 de outubro de 2011

Problema 3.4

O módulo turtle permite controlar tartarugas que fazem desenhos num tela. Durante as aulas colocámos vários problemas com um grau de dificuldade pequeno. Por exemplo, efectuar desenhos de polígonos regulares. Têm uma estrutura muito semelhante. A listagem que se segue ilustra como se pode fazer de dois modos distintos o desenho de um quadrado, conhecido apenas o lado.


def quadrado_2(lado):
"""Desenha um quadrado de lado lado.

"""
conta = 0
while conta < 4:
forward(lado)
right(90)
conta = conta + 1

def quadrado_3(lado):
"""Desenha um quadrado de lado lado.

"""
for i in range(4):
forward(lado)
right(90)

Aqui o importante a reter é que é mais adequado usar o ciclo for: conhecemos quantas vezes vamos ter que executar o ciclo.

Mas podemos querer uma solução em que a posição e a orientação iniciais também possam ser variáveis. Esta questão resolve-se considerando esses elementos como parâmetros.


def quad(lado,xcor,ycor,orient):
"""Desenha um quadrado em que o lado, a posição inicial e a orientação inicial podem variar.

"""
penup()
goto(xcor,ycor)
setheading(orient)
pendown()
for i in range(4):
forward(lado)
right(90)
hideturtle()

Podemos generalizar o programa do quadrado para o caso de um polígono regular, desenhado a partir do conhecimento do número de lados e do seu comprimento.


def poligono(num_lados,tam_lado):
"""Desenha um polígono regular.

"""
angulo = 360.0 / num_lados
for i in range(num_lados):
forward(tam_lado)
right(angulo)
hideturtle()


Uma vez mais se pode ver como se trata a questão de ter mais elementos variáveis: são acrescentados como parâmetros. Este programa pode ajudar-nos a desenhar uma circunferência, conhecido o seu raio. A localização inicial pode ser fixa ou variável.


def circunf(raio):
"""Desenha uma circunferência conhecido o raio.

"""
perimetro = 2 * math.pi * raio
tam_lado = int(perimetro / 360.0)
poligono(360,tam_lado)
hideturtle()


def circunf_centro(raio, xcor_centro,ycor_centro):
"""Desenha uma circunferência conhecido o raio e a posição do centro.

"""
perimetro = 2 * math.pi * raio
tam_lado = int(perimetro / 360.0)
penup()
goto(xcor_centro, ycor_centro)
pendown()
poligono(360,tam_lado)
hideturtle()

Sem comentários:

Enviar um comentário