quinta-feira, 8 de outubro de 2009

Pi: ver para crer!

No post anterior mostrei como se pode calcular o valor de Pi usando o Método de Monte Carlo. Também já falei no módulo cTurtle que permite colocar tartarugas a fazer desenhos numa tela. Vamos juntar as duas coisas e fornecer uma solução ao cálculo do vaslor de Pi com animação! Para já o código.

01.import random
02.import math
03.import cTurtle
04. 
05. 
06.def monte_carlo_animado(num_dardos):
07.    """
08.    Valor de pi pelo método de monte Carlo.
09.    Versão gráfica.
10.    """
11.    # prepara a visualização
12.    janela = cTurtle.Turtle()
13.    janela.setWorldCoordinates(-2,-2,2,2)
14.    janela.hideturtle()
15.     
16.    janela.up()
17.    janela.goto(-1,0)
18.    janela.down()
19.    janela.goto(1,0)
20.     
21.    janela.up()
22.    janela.goto(0,1)
23.    janela.down()
24.    janela.goto(0,-1)  
25.     
26.    # vamos aos cálculos
27.    conta_dardos_in = 0
28.    janela.up()
29.     
30.    for i in range(num_dardos):
31.        x = random.random()
32.        y = random.random()
33.         
34.        d = math.sqrt(x**2 + y**2)
35.        janela.goto(x,y)
36.         
37.        if d <= 1:
38.            conta_dardos_in = conta_dardos_in + 1
39.            janela.color("blue")
40.        else:
41.            janela.color("red")
42.         
43.        janela.dot()
44.     
45.    janela.exitOnClick()
46.     
47.    res = 4 * (conta_dardos_in / float(num_dardos))
48.     
49.    return res
50.     
51.     
52.if __name__ == '__main__':
53.    print monte_carlo_animado(1500)


A parte da cálculo propriamente dito já foi explicado. Tratemos pois à animação. As linhas 11,12 e 13 criam a tartaruga e definem a dimensão da tela. Das linhas 15 à 22 desenhamos os eixos. Na linha 33 colocamos a tartaruga no sítio certo.Os dardos dentro do círculo serão azuis (linha 37) e ou outros vermelhos (linha 39). São desenhados como pontos (linha 41). Se clicarmos dentro da tela o programa termina (linha 43). Executando o programa para 1500 dardos obtemos a linda figura:


.

Sem comentários:

Enviar um comentário