Commit Iniziale

This commit is contained in:
Rnhmjoj 2013-01-05 02:59:22 +01:00
commit 0b16c0edd8
4 changed files with 92 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.DS_Store
__pycache__/

10
License.txt Normal file
View File

@ -0,0 +1,10 @@
* Ago di Buffon
*
* Simulazione del metodo dell'ago di Buffon in python 3.
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* @author Michele Guerini Rocco aka Rnhmjoj
* @since 2013

22
README.md Normal file
View File

@ -0,0 +1,22 @@
Ago di Buffon
=============
Simulazione del metodo dell'ago di Buffon in python 3.
------------------------------------------------------
### Informazioni
Un semplice modulo per stimare π usando il metodo dell'ago di Buffon.
Tramite turtle graphics è generato un pavimento e disegnati gli aghi casualmente.
Se un ago incrocia le assi diventa rosso e viene conteggiato.
Il valore stimato di π è continuamente stampato e al termine viene mostrato lo scarto dal valore reale.
È predisposto con la "stima" di Lazzarini per buoni risultati.
Il migliore trovato è stato con uno scarto di 8*10^-6.
### Istruzioni
Parametri:
X,Y: lunghezze degli assi;
T: distanza tra le assi del parquet;
L: lunghezza dell'ago;
N: numero di iterazioni.

58
de Buffon.py Normal file
View File

@ -0,0 +1,58 @@
import turtle,random,math
X = 100
Y = 100
T = 20
L = 5/6*T
N = 213*13
assi = ()
def impostazioni():
turtle.title("Ago di Buffon")
turtle.setworldcoordinates(-(X+2), -(Y), X+2, Y)
turtle.hideturtle()
turtle.speed(0)
def vai(x, y):
turtle.pu()
turtle.goto(x,y)
turtle.pd()
def parquet(t):
global X,assi
vai(-X,-Y)
for x in range(-X,X+1,t):
assi += x,
turtle.lt(90)
turtle.goto(x,Y)
vai(x,-Y)
turtle.rt(90)
vai(x+t,-Y)
def ago(l):
vai(random.uniform(-X,X), random.uniform(-Y,Y))
x1 = turtle.xcor()
turtle.lt(random.uniform(0,360))
turtle.fd(l)
x2 = turtle.xcor()
for x in assi:
if (x1 < x < x2) or (x2 < x < x1):
turtle.pencolor("red")
turtle.bk(l)
turtle.pencolor("black")
return 1
return 0
impostazioni()
parquet(T)
p = 0
for i in range(N):
p += ago(L)
try:
π = (2*L)/(T*p/N)
except ZeroDivisionError:
π = 0
print(π)
print("Scarto:",abs(100-(π/math.pi*100)),"%")
turtle.mainloop()