Commit Iniziale
This commit is contained in:
commit
0b16c0edd8
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.DS_Store
|
||||
__pycache__/
|
10
License.txt
Normal file
10
License.txt
Normal 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
22
README.md
Normal 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
58
de Buffon.py
Normal 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()
|
Loading…
Reference in New Issue
Block a user