Bueno, os voy a proporcionar más información, que eso nunca viene mal para resolver un problema. Pensé que no seria necesaria, pero quizás paso algo por alto y no quiero perder tiempo...
Bueno, he hecho un programa para aproximarte al valor del número PI. Básicamente se basa en la probabilidad. Si tenemos un cuadrado de lado dos y inscribimos una circumferencia en el, el área del cuadrado será 4 (2^2) y la del círculo PI (PI·1^2). Entonces, si hacemos un punto al azar en el cuadrado, la probabilidad de que caiga en el círculo es de PI/4. Bueno, podéis buscar en el google "método montecarlo".
Entonces, cada vez que se elige al azar las coordenadas del punto que se va a pintar, como no, lo pinta (esto no es necesario, pero queda chulo) y ahí está el problema, que al pintar los puntos y pasar una ventana por encima me borra los puntos!
No puedo repintar cada vez, porque en alguna ocasión deberia repintar 9999999 puntos y en la siguiente esos más uno, y así sucesivamente.
En vez de hacerlo en el canvas del form he probado con un PaintBox y tengo el mismo problema. Con un TImage no me pinta el punto cada vez. No se que hacer...
Bueno, pongo el código del programa (sólo lo que nos interesa):
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
Point: TPoint;
I, Counter, Max: Integer;
begin
Form1.Canvas.Ellipse(0,0,400,400);
Counter := 0;
Max := StrToInt(FloatToStr(JvSpinEdit1.Value));
for I := 1 to Max do
begin
Randomize;
Point.X := Random(400);
Randomize;
Point.Y := Random(400);
if CheckPoint(PointToModPoint(Point)) = True then
begin
Counter := Counter+1;
Form1.Canvas.Pixels[Point.X, Point.Y] := clRed;
end
else
Form1.Canvas.Pixels[Point.X, Point.Y] := clBlue;
Label2.Caption := Format('Tirs: %d || Encerts: %d', [I, Counter]);
Label2.Repaint;
end;
ShowMessage(FloatToStr((Counter/Max)*4));
end;