function aprox_pi = buffon(n)
% aprox_pi = buffon(n)
% 
% pocita aproximaci pi Buffonovou metodou
%
% input:
% n ... pocet pokusu hodu jehlou

% vzdalenost rovnobezek = 1
% delka jehly = 0.5
       
suma = 0;

for i = 1 : n           
    % urceni polohy jehly 
    y = rand; % y-souradnice pocatku jehly
    alfa = rand * pi; % uhel, ktery svira jehla s kladnym smerem osy x
    
    suma = suma + hod_jehlu(y, alfa);     
end

aprox_pi = n / suma;

disp(['Aproximace pi: ', num2str(aprox_pi)])
disp(['Absolutni chyba: ', num2str(abs(aprox_pi - pi))])
disp(['Relativni chyba: ', num2str(100*abs(aprox_pi - pi)/pi),'%'])

% konec

function p = hod_jehlu(y, alfa)

p = 0; % inicializace, neuspech

if y == 0 
    p = 1; % uspech
else    
    v = 0.5 * sin(alfa); % delka projekce jehly do osy y
    if v >= 1 - y
        p = 1; % uspech
    end
end
   
% konec

