segunda-feira, 14 de dezembro de 2009

Problema 9.8

Este problema apenas acrescenta a necessidade de visualizar os dados. Para isso vamos usar o módulo cTurtle. O código é o seguinte:

def visualiza_terramotos(ficheiro, num_agrupa):
dicio_dados = cria_dicio_dados_terramoto(ficheiro)
centroides_terramoto = cria_centroides(num_agrupa,dicio_dados)
agrupamentos = cria_agrupamentos(num_agrupa,centroides_terramoto,dicio_dados,10)

# prepara o cenário ...
tartaruga = cTurtle.Turtle()
tartaruga.bgpic('/tempo/imagens/worldmap.gif')
tartaruga.screensize(448,266)
tartaruga.setWorldCoordinates(-180,-90, 180,90)
tartaruga.hideturtle()
tartaruga.up()

# cores aleatorias
tartaruga.colormode(255)
lista_cores = []
while len(lista_cores) < num_agrupa:
r = random.randint(0,255)
g = random.randint(0,255)
b = random.randint(0,255)
cor = (r,g,b)
minimo = dist_euclid_lista(cor, lista_cores)
if (cor not in lista_cores) and (minimo > 255):
lista_cores.append(cor)

# mostra os dados
for indice_agrupa in range(num_agrupa):
tartaruga.color(lista_cores[indice_agrupa])
for chave in agrupamentos[indice_agrupa]:
longitude = dicio_dados[chave][0]
latitude = dicio_dados[chave][1]
tartaruga.goto(longitude,latitude)
tartaruga.dot()
tartaruga.exitOnClick()

Começamos por obter os agrupamentos com os programas já desenvolvidos anteriormente (linhas 3 a 5 ). Criamos de seguida o objecto tartaruga (linha 8), colocamos em background a imagem (linha 9), e ajustamos o tamanho da janela ao tamanho real da imagem (linha 10). Redefinimos as coordenadas do mundo para ficarem iguais aos do problema (linha 11, latitude entre -90 e 90 e longitude entre -180 e 180), escondemos (linha 12) e levantamos a tartaruga (linha 13). Escolhemos aleatoriamente as cores dos pontos com que vamos marcar o mapa (linhas 15 a 25), mas garantido que são suficientemente distintas (linhas 23 a 25). Depois é só mostrar os pontos (linhas 27 a 34), e abandonar no final (linha 35)!
A figura abaixo mostra um exemplo resultado da execução do programa com os dados do tremor de terra e para 4 agrupamentos.


Sem comentários:

Enviar um comentário