%
%  function val = calcPi( n ) 
%     Zahl der Zufallspunkte, z.B. 100.000    
%
%     numIn = Zahl der Zufallspunkte, die im Viertelkreis liegen 
%     Fläche Viertelkreis mit Radius 1 = pi/4 (numIn Punkte)
%     Fläche Quadrat mit Seitenlänge 1 = 1    (n Punkte)
%     pi = 4 * Viertelkreis/Quadrat = 4 * numIn / n
%
function valPi = calcPi( n ) 

   nZ = 400;
   A(1:nZ,1:nZ,1:3) = 255;   
   % A(1:nZ,1:nZ,3)   = 150;  % außerhalb blau   

   numIn = 0;   % Zähler für Zahl der Punkte innerhalb 
   
   for( k = 1:n ) 
      p = rand(2,1);
      if( norm(p) <= 1 )
         numIn = numIn + 1; 
         
         % Zeile und Spalte zu Punkt (p(1);p(2)) bestimmen 
         %   0 < p(i) < 1, aktZ >= 1, deshalb +1 
         %   Randpunkte p = 0.99... 
         %      => aktZ = int32( nZ - 0.5 ) + 1 = nZ -1 + 1 = nZ 
         %   Randpunkte p = 0.00...1  
         %      => aktZ = int32( 0.00...1 - 0.5 ) + 1 = 0 + 1 = 1 
         aktZ = int32( p(1)*nZ - 0.5) + 1; 
         aktS = int32( p(2)*nZ - 0.5) + 1; 
         % Punkt farbig markieren
         A(aktZ,aktS,1) = 150;  % innen rot 
         A(aktZ,aktS,2) =   0;  % innen rot 
         A(aktZ,aktS,3) =   0;  % innen rot 
      end
   end
   
   % Fläche Viertelkreis mit Radius 1 = pi/4 
   % Fläche Quadrat mit Seitenlänge 1 = 1 (n Punkte)
   %   pi = 4 * Viertelkreis/Quadrat = 4 * numIn / n
   valPi = 4 * numIn / n;
   
   image( uint8(A) );
   set( gca, 'XTick', [] )
   set( gca, 'YTick', [] )
   axis image
   txt = sprintf( 'n = %d,  pi = %6.4f', n, valPi );
   title( txt )
   
end
  