commit 0b16c0edd8f652a8c484723db3607af66b9beb10 Author: Rnhmjoj Date: Sat Jan 5 02:59:22 2013 +0100 Commit Iniziale diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f678d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +__pycache__/ \ No newline at end of file diff --git a/License.txt b/License.txt new file mode 100644 index 0000000..6b8c4d5 --- /dev/null +++ b/License.txt @@ -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 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b5918a --- /dev/null +++ b/README.md @@ -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. \ No newline at end of file diff --git a/de Buffon.py b/de Buffon.py new file mode 100644 index 0000000..a22487d --- /dev/null +++ b/de Buffon.py @@ -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()