import math, random import turtle #Parametri X = 100 Y = 100 T = 20 L = 5/6*T N = 213 assi = () def impostazioni(): """Impostazioni per inizializzare turtle""" turtle.title("Ago di Buffon") turtle.setworldcoordinates(-(X+2), -(Y), X+2, Y) turtle.hideturtle() turtle.speed(0) def vai(x, y): """Sposta il cursore al punto (x, y) senza tracciare una linea.""" turtle.pu() turtle.goto(x, y) turtle.pd() def parquet(t): """Disegna le assi del parquet.""" 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): """ Lancia un'ago. Se incrocia le assi lo colora di rosso e restituisce 1, altrimenti restituisce 0. """ 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 else: 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()