Estuve jugando un poco con el codigo que dejaste
y solo queria comentarte un par de cositas.
No utilices el randomize dos veces en cada ciclo, porque los numeros
no saldran tan aleatorios como cabria esperar, lo mejor es llamar a randomize una sola vez. Ya lo dice la ayuda de delphi:
Cita:
Do not combine the call to Randomize in a loop with calls to the Random function
|
Por ultimo, para acelerar un poco la cosa, podrias hacer dos loop uno dentro del otro, en el de dentro colocarias puntos y en el de fuera actualizarias el TImage, visualmente apenas notaras la diferencia pero sera mucho menos trabajo para la aplicacion.
Aqui te dejo el codigo tal como yo lo veo:
Código Delphi
[-]
const
radio = 200;
Vueltas = 1000;
PuntosPorVuelta = 100;
var
x,y: Integer;
i, j, k: Integer;
begin
Randomize;
k:= 0;
Image1.Picture.Assign(nil);
Image1.Width:= 2*radio;
Image1.Height:= 2*radio;
Image1.Canvas.Ellipse(0,0,2*radio,2*radio);
for j:= 1 to Vueltas do
begin
for i := 1 to PuntosPorVuelta do
begin
x := Random(2*radio);
y := Random(2*radio);
if (sqr(x-radio)+sqr(y-radio))< sqr(radio) then
begin
inc(k);
Image1.Canvas.Pixels[x, y]:= clRed;
end
else
Image1.Canvas.Pixels[x, y]:= clBlue;
Label2.Caption := Format('Tirs: %d || Encerts: %d', [i*j, k]);
end;
Label2.Repaint;
Image1.Repaint;
end;
ShowMessage(FloatToStr((k/(Vueltas*PuntosPorVuelta))*4));
end;
Lo dicho, solo es una opinion,
no te molestes porque retoque un poco tu codigo