Depois de muitos anos a programar todos nós temos um conjunto de soluções para diferentes problemas. quando se nos depara um novo problema um reflexo natural é perguntar: já resolvi este problema? Já resolvi um problema parecido? Já resolvi um problema que não sendo parecido me pode inspirar no modo de resolver o problema novo? Para tornar as coisas mais concretas olhemos para a figura seguinte:
Cinco quadrados concêntricos, coloridos. O problema é o de desenvolver um programa que crie este desenho. Depois de pensar um pouco, recordo-me do problema do logotipo dos jogos olímpicos:
Qual é analogia? O mesmo objecto repetido cinco vezes, mas com cores, posição e dimensão diferentes. Então é tentador seguir a mesma abordagem que neste caso: primeiro um programa que desenha um quadrado colorido, numa dada posição e com um dado comprimento para o lado. Como no caso anterior podia resolver este problema por partes: primeiro, um quadrado com um dado lado, depois numa dada posição e, finalmente com uma dada cor. Acho que não me levarão a mal se eu colocar já a versão final. Afinal, é o que nos vai acontecer à medida que estamos à vontade com a programação!
01.
def
quadrado_cor(posx,posy,lado, cor):
02.
03.
turtle.penup()
04.
turtle.goto(posx,posy)
05.
turtle.pendown()
06.
07.
turtle.pencolor(cor)
08.
09.
for
i
in
range(
4
):
10.
turtle.forward(lado)
11.
turtle.left(
90
)
12.
turtle.hideturtle()
Agora a segunda parte: desenhar cinco, variando a posição, o lado e a cor. Vamos fazer um desenho para nos ajudar, desenho esse que mostre a relação entre dois quadrados em função da diferença de tamanho dos respectivos lados (que designamos por incremento):
A partir do desenho não é difícil o que temos que mudar na posição e no tamanho. Na posição, e tomando como referência o canto inferior esquerdo a posição do quadrado externo relativamente ao interno será:
posx_ext = posx_int - incremento / 2
posy_ext = posy_int - incremento / 2
Quanto ao tamanho:
lado_ext = lado_int + incremento
Resolvida esta questão vamos então resolver o que falta.
01.
def
quadrados_concentricos(posx, posy,lado,incremento):
02.
quadrado_cor(posx,posy,lado,
'red'
)
03.
quadrado_cor(posx
-
incremento
/
2
,posy
-
incremento
/
2
,lado
+
incremento,
'green'
)
04.
quadrado_cor(posx
-
incremento,posy
-
incremento,lado
+
2
*
incremento,
'blue'
)
05.
quadrado_cor(posx
-
3
*
incremento
/
2
,posy
-
3
*
incremento
/
2
,lado
+
3
*
incremento,
'black'
)
06.
quadrado_cor(posx
-
2
*
incremento,posy
-
2
*
incremento,lado
+
4
*
incremento,
'orange'
)
07.
08.
09.
10.
if
__name__
=
=
'__main__'
:
11.
quadrados_concentricos(
0
,
0
,
50
,
20
)
12.
turtle.exitonclick()
Antes de ir fazer outra coisa volte ao código do logotipo dos jogos olímpicos e veja as semelhanças...
Sem comentários:
Enviar um comentário