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