Vamos supor que o nosso problema consiste em querer desenhar numa tela um caminho aleatório formado por segmentos de recta. Vamos supor ainda que nos pedem que fique guardado num ficheiro externo uma representação do caminho. Vamos então proceder por partes.
01.
def
caminho_alea(n):
02.
# Gerar segmentos do caminho
03.
# Guardar caminho
04.
# Ler caminho
05.
# Mostrar caminho
06.
pass
07.
08.
if
__name__
=
=
'__main__'
:
09.
caminho_alea(
30
)
Como vamos resolver cada sub-problema? Por que ordem? Vamos começar por resolver o primeiro dos quatro. Vamos tornar mais específico o enunciado. Vamos admitir que um segmento é representado pelos seus pontos extremos. Vamos ainda concretizar os valores possíveis para dada um dos pontos. Como se trata de um caminho, vamos garantir a ligação entre os segmentos impondo que os segmentos consecutivos têm uma extremidade em comum. Isso tem como consequência que eu possa pensar em termos de pontos consecutivos e não em segmentos. Assim preciso de um programa que gere pontos, podendo cada um deles assumir valores num dado intervalo. Os pontos serão representados por uma lista com as coordenadas do ponto.
01.
import
random
02.
03.
def
gera_pontos(n, inf, sup):
04.
pontos
=
[]
05.
for
i
in
range(n):
06.
pontos.append([random.randint(inf,sup), random.randint(inf,sup)])
07.
return
pontos
08.
09.
def
gera_pontos_2(n,inf,sup):
10.
return
[[random.randint(inf,sup), random.randint(inf,sup)]
for
i
in
range(n)]
1.
def
caminho_alea(n, inf,sup):
2.
# Gerar segmentos do caminho
3.
pontos
=
gera_pontos(n, inf, sup)
4.
# Guardar caminho
5.
# Ler caminho
6.
# Mostrar caminho
1.
def
guarda_caminho(ficheiro, dados):
2.
fich_dados
=
open(ficheiro,
'w'
)
3.
for
x,y
in
dados:
4.
linha
=
str(x)
+
'\t'
+
str(y)
+
'\n'
5.
fich_dados.write(linha)
6.
fich_dados.close()
1.
def
caminho_alea(n, inf,sup, ficheiro):
2.
# Gerar segmentos do caminho
3.
pontos
=
gera_pontos(n, inf, sup)
4.
# Guardar caminho
5.
guarda_caminho(ficheiro,pontos)
6.
# Ler caminho
7.
# Mostrar caminho
01.
def
ler_caminho(ficheiro):
02.
fich_dados
=
open(ficheiro,
'r'
)
03.
valores
=
[]
04.
for
linha
in
fich_dados:
05.
ponto
=
linha[:
-
1
].split(
'\t'
)
06.
x
=
int(ponto[
0
])
07.
y
=
int(ponto[
1
])
08.
valores.append([x,y])
09.
fich_dados.close()
10.
return
valores
1.
def
caminho_alea(n, inf,sup, ficheiro):
2.
# Gerar segmentos do caminho
3.
pontos
=
gera_pontos(n, inf, sup)
4.
# Guardar caminho
5.
guarda_caminho(ficheiro,pontos)
6.
# Ler caminho
7.
pontos
=
ler_caminho(ficheiro)
8.
# Mostrar caminho
01.
import
matplotlib.pyplot as plt
02.
03.
def
mostra_caminho(pontos):
04.
plt.title(
'Caminho'
)
05.
plt.xlabel(
'X'
)
06.
plt.ylabel(
'Y'
)
07.
lista_x
=
[ x
for
x,y
in
pontos]
08.
lista_y
=
[y
for
x,y
in
pontos]
09.
plt.plot(lista_x,lista_y)
10.
plt.show()
01.
import
matplotlib.pyplot as plt
02.
03.
def
mostra_caminho(pontos):
04.
plt.title(
'Caminho'
)
05.
plt.xlabel(
'X'
)
06.
plt.ylabel(
'Y'
)
07.
coord
=
zip(
*
pontos)
08.
plt.plot(
*
coord)
09.
plt.show()
01.
def
caminho_alea(n, inf,sup, ficheiro):
02.
# Gerar segmentos do caminho
03.
pontos
=
gera_pontos(n, inf, sup)
04.
# Guardar caminho
05.
guarda_caminho(ficheiro,pontos)
06.
# Ler caminho
07.
pontos
=
ler_caminho(ficheiro)
08.
# Mostrar caminho
09.
mostra_caminho(pontos)
1.
def
caminho_alea(n, inf,sup, ficheiro):
2.
# Gerar segmentos do caminho
3.
pontos
=
gera_pontos(n, inf, sup)
4.
# Guardar caminho
5.
guarda_caminho(ficheiro,pontos)
6.
# Mostrar caminho
7.
mostra_caminho(pontos)
Sem comentários:
Enviar um comentário