Comenzamos con las librerias
import numpy as np import matplotlib.pyplot as plt from random import * import math
Creamos la funcion lienas
def lineas(): xv=np.array([0,16]) yv=np.array([0,0]) plt.plot(xv,yv,'-k') xv=np.array([0,16]) yv=np.array([25,25]) plt.plot(xv,yv,'-k') xv=np.array([0,0]) yv=np.array([0,25]) plt.plot(xv,yv,'-k') xv=np.array([16,16]) yv=np.array([0,25]) plt.plot(xv,yv,'-k') xv=np.array([0,16]) yv=np.array([0,0]) plt.plot(xv,yv,'-k') xv=np.array([0,16]) yv=np.array([25,25]) plt.plot(xv,yv,'-k') xv=np.array([0,16]) yv=np.array([6,6]) plt.plot(xv,yv,'-b') xv=np.array([0,16]) yv=np.array([12,12]) plt.plot(xv,yv,'-b') xv=np.array([0,16]) yv=np.array([18,18]) plt.plot(xv,yv,'-b') xv=np.array([0,16]) yv=np.array([24,24]) plt.plot(xv,yv,'-b')
se corre con
lineas() plt.axis('square')
Para ubicar un punto aleatorio en la hoja hacemos
lineas() plt.axis('square') x=random()*16 y=random()*25 plt.plot(x,y,'or')
Para poner un picadientes en forma aleatoria hacemos
lineas() plt.axis('square') x=random()*16 y=random()*25 plt.plot(x,y,'or') l=6 theta1=180*random() theta2=theta1*(math.pi/180.0) x1 = (l/2)*math.cos(theta2) y1 = (l/2)*math.sin(theta2) plt.plot(x+x1,y+y1,'om') plt.plot(x-x1,y-y1,'oy') xv=np.array([x-x1,x+x1]) yv=np.array([y-y1,y+y1]) plt.plot(xv,yv,'-g')
Para saber que la aguja toca una linea hacemos
lineas() plt.axis('square') x=random()*16 y=random()*25 plt.plot(x,y,'or') l=6 theta1=180*random() theta2=theta1*(math.pi/180.0) x1 = (l/2)*math.cos(theta2) y1 = (l/2)*math.sin(theta2) plt.plot(x+x1,y+y1,'om') plt.plot(x-x1,y-y1,'oy') xv=np.array([x-x1,x+x1]) yv=np.array([y-y1,y+y1]) plt.plot(xv,yv,'-g') if y-y1 < 0*6 and y+y1>0*6: print('toca y=0') if y-y1 < 1*6 and y+y1>1*6: print('toca y=1*6') if y-y1 < 2*6 and y+y1>2*6: print('toca y=2*6') if y-y1 < 3*6 and y+y1>3*6: print('toca y=3*6') if y-y1 < 4*6 and y+y1>4*6: print('toca y=4*6')
Para contar el numero de veces que se tocan las lineas en un experimento de 100 repeticiones se hace
lineas() plt.axis('square') toco=0 N=100 for i in range(N): x=random()*16 y=random()*25 plt.plot(x,y,'or') l=6 theta1=180*random() theta2=theta1*(math.pi/180.0) x1 = (l/2)*math.cos(theta2) y1 = (l/2)*math.sin(theta2) plt.plot(x+x1,y+y1,'om') plt.plot(x-x1,y-y1,'oy') xv=np.array([x-x1,x+x1]) yv=np.array([y-y1,y+y1]) plt.plot(xv,yv,'-g') if y-y1 < 0*6 and y+y1>0*6: print('toca y=0') toco=toco+1 if y-y1 < 1*6 and y+y1>1*6: print('toca y=1*6') toco=toco+1 if y-y1 < 2*6 and y+y1>2*6: print('toca y=2*6') toco=toco+1 if y-y1 < 3*6 and y+y1>3*6: print('toca y=3*6') toco=toco+1 if y-y1 < 4*6 and y+y1>4*6: print('toca y=4*6') toco=toco+1 print(toco)
El caclulo de pi se hace con