01.
import
turtle
02.
03.
def
grelha_1(dim, lado):
04.
""" Solução básica."""
05.
# verticais
06.
turtle.setheading(
90
)
07.
for
i
in
range(dim
+
1
):
08.
# posiciona
09.
turtle.penup()
10.
turtle.goto(i
*
lado,
0
)
11.
turtle.pendown()
12.
# desenha
13.
turtle.forward(dim
*
lado)
14.
# horizontais
15.
turtle.setheading(
0
)
16.
for
i
in
range(dim
+
1
):
17.
# posiciona
18.
turtle.penup()
19.
turtle.goto(
0
,i
*
lado)
20.
turtle.pendown()
21.
# desenha
22.
turtle.forward(dim
*
lado)
23.
turtle.hideturtle()
Uma primeira alteração possível é considerar a possibilidade de controlar a localização do canto inferior esquerdo. Vejamos como se pode fazer.
01.
def
grelha_2(dim, lado,pos_x,pos_y):
02.
""" Controlando a posição do canto inferior esquerdo."""
03.
# verticais
04.
turtle.setheading(
90
)
05.
for
i
in
range(dim
+
1
):
06.
# posiciona
07.
turtle.penup()
08.
turtle.goto(pos_x
+
i
*
lado,pos_y)
09.
turtle.pendown()
10.
# desenha
11.
turtle.forward(dim
*
lado)
12.
# horizontais
13.
turtle.setheading(
0
)
14.
for
i
in
range(dim
+
1
):
15.
# posiciona
16.
turtle.penup()
17.
turtle.goto(pos_x,pos_y
+
i
*
lado)
18.
turtle.pendown()
19.
# desenha
20.
turtle.forward(dim
*
lado)
21.
turtle.hideturtle()
Suponhamos agora que nos pedem uma solução em que seja também possível controlar a orientação do quadrado. Esta questão já obriga a uma ginástica adicional, mas a questão central mantém-se a mesma: definir os pontos em que se iniciam as linhas. Eis uma solução, não muito elegante, mas que funciona…
01.
def
grelha_4(dim, lado,pos_x,pos_y,orient):
02.
""" Controlando a posição e a orientação. """
03.
# verticais
04.
for
i
in
range(dim
+
1
):
05.
# posiciona
06.
turtle.penup()
07.
turtle.goto(pos_x,pos_y)
08.
turtle.setheading(orient)
09.
turtle.forward(i
*
lado)
10.
turtle.setheading(
90
+
orient)
11.
turtle.pendown()
12.
# desenha
13.
turtle.forward(dim
*
lado)
14.
# horizontais
15.
for
i
in
range(dim
+
1
):
16.
# posiciona
17.
turtle.penup()
18.
turtle.goto(pos_x,pos_y)
19.
turtle.setheading(
90
+
orient)
20.
turtle.forward(i
*
lado)
21.
turtle.setheading(orient)
22.
turtle.pendown()
23.
# desenha
24.
turtle.forward(dim
*
lado)
25.
turtle.hideturtle()
01.
def
linha(pos_x,pos_y, orient, tam):
02.
# posiciona
03.
turtle.penup()
04.
turtle.goto(pos_x,pos_y)
05.
turtle.setheading(orient)
06.
turtle.pendown()
07.
# desenha
08.
turtle.forward(tam)
09.
turtle.hideturtle()
01.
def
grelha_5(dim, lado):
02.
""" Solução básica."""
03.
# horizontais
04.
for
i
in
range(dim
+
1
):
05.
linha(
0
,i
*
lado,
0
,dim
*
lado)
06.
# verticais
07.
for
i
in
range(dim
+
1
):
08.
linha(i
*
lado,
0
,
90
,dim
*
lado)
09.
turtle.hideturtle()
01.
def
grelha_6(dim, lado,pos_x,pos_y):
02.
""" Solução com controlo da posição do canto inferior esquerdo."""
03.
# horizontais
04.
for
i
in
range(dim
+
1
):
05.
linha(pos_x,pos_y
+
i
*
lado,
0
,dim
*
lado)
06.
# verticais
07.
for
i
in
range(dim
+
1
):
08.
linha(pos_x
+
i
*
lado,pos_y,
90
,dim
*
lado)
09.
turtle.hideturtle()
01.
import
math
02.
03.
def
grelha_7(dim, lado,pos_x,pos_y,orient):
04.
""" Solução com controlo da posição do canto inferior esquerdo e a orientação."""
05.
deg_rad
=
math.pi
/
180
06.
# horizontais
07.
for
i
in
range(dim
+
1
):
08.
linha(pos_x
+
i
*
lado
*
math.cos((orient
+
90
)
*
deg_rad),pos_y
+
i
*
lado
*
math.sin((orient
+
90
)
*
deg_rad),orient,dim
*
lado)
09.
# verticais
10.
for
i
in
range(dim
+
1
):
11.
linha(pos_x
+
i
*
lado
*
math.cos(orient
*
deg_rad),pos_y
+
i
*
lado
*
math.sin(orient
*
deg_rad),
90
+
orient,dim
*
lado)
12.
turtle.hideturtle()
Para começar precisamos de uma primitiva para desenhar um quadrado:
01.
def
quadrado(pos_x, pos_y, lado, orient):
02.
# posiciona
03.
turtle.penup()
04.
turtle.goto(pos_x,pos_y)
05.
turtle.setheading(orient)
06.
turtle.pendown()
07.
# desenha
08.
for
i
in
range(
4
):
09.
turtle.forward(lado)
10.
turtle.lt(
90
)
11.
turtle.hideturtle()
1.
def
grelha_8(dim, lado):
2.
""" Solução básica."""
3.
# Por linhas
4.
for
i
in
range(dim):
5.
# linha i
6.
for
j
in
range(dim):
7.
quadrado(j
*
lado,i
*
lado,lado,
0
)
8.
turtle.hideturtle()
1.
def
grelha_9(dim, lado, pos_x, pos_y):
2.
""" Solução com controlo da posição do canto inferior esquerdo."""
3.
# Por linhas
4.
for
i
in
range(dim):
5.
# linha i
6.
for
j
in
range(dim):
7.
quadrado(pos_x
+
j
*
lado,pos_y
+
i
*
lado,lado,
0
)
8.
turtle.hideturtle()
01.
def
grelha_10(dim, lado, pos_x, pos_y, orient):
02.
""" Solução com controlo da posição do canto inferior esquerdo e da orientação."""
03.
deg_rad
=
math.pi
/
180
04.
# Por linhas
05.
for
i
in
range(dim):
06.
# linha i
07.
p_x
=
pos_x
+
i
*
lado
*
math.cos((orient
+
90
)
*
deg_rad)
08.
p_y
=
pos_y
+
i
*
lado
*
math.sin((orient
+
90
)
*
deg_rad)
09.
for
j
in
range(dim):
10.
quadrado(p_x,p_y,lado,orient)
11.
p_x
=
p_x
+
lado
*
math.cos(orient
*
deg_rad)
12.
p_y
=
p_y
+
lado
*
math.sin(orient
*
deg_rad)
13.
turtle.hideturtle()
. Agora sim podemos dar o trabalho por encerrado!!! Mas, espere aí, ouço-o dizer, a passagem para o ponto de vista das células quadradas não era para termos mais graus de liberdade, nomeadamente em relação à cor dos quadrados??? É verdade sim senhor. Então vamos a isso. A solução mais simples consistirá em poder desenhar quadrados coloridos…
01.
def
quadrado_cor(pos_x, pos_y, lado, orient,cor):
02.
# cor
03.
turtle.color(cor)
04.
# posiciona
05.
turtle.penup()
06.
turtle.goto(pos_x,pos_y)
07.
turtle.setheading(orient)
08.
turtle.pendown()
09.
# desenha
10.
turtle.begin_fill()
11.
for
i
in
range(
4
):
12.
turtle.forward(lado)
13.
turtle.lt(
90
)
14.
turtle.end_fill()
15.
turtle.hideturtle()
01.
def
grelha_11(dim, lado, pos_x, pos_y, orient):
02.
""" Solução com controlo da posição do canto inferior esquerdo e da orientação."""
03.
deg_rad
=
math.pi
/
180
04.
# Por linhas
05.
for
i
in
range(dim):
06.
# linha i
07.
p_x
=
pos_x
+
i
*
lado
*
math.cos((orient
+
90
)
*
deg_rad)
08.
p_y
=
pos_y
+
i
*
lado
*
math.sin((orient
+
90
)
*
deg_rad)
09.
for
j
in
range(dim):
10.
if
(i
+
j)
%
2
=
=
0
:
11.
quadrado_cor(p_x,p_y,lado,orient,
'black'
)
12.
else
:
13.
quadrado_cor(p_x,p_y,lado,orient,
'gray'
)
14.
p_x
=
p_x
+
lado
*
math.cos(orient
*
deg_rad)
15.
p_y
=
p_y
+
lado
*
math.sin(orient
*
deg_rad)
16.
turtle.hideturtle()
Sem comentários:
Enviar um comentário