程序首先在Image控件区域内画一个边长为的正方形作为程序的演示窗口故FormCreate事件如下
procedure TFormFormCreate(Sender: TObject);
begin
// 画亮绿色的正方形演示框
ImageCanvasBrushColor:=clBlack;
ImageCanvasFillRect(Rect());
ImageCanvasPenColor:=cllime;
ImageCanvasRectangle();
DoubleBuffered := True;
end;
接着放入一个Timer实现点的绘制以及π的计算
procedure TFormTimerTimer(Sender: TObject);
var
abiii:longint;
pipiok:single;
begin
// 随机产生坐标点
i:=random();
ii:=random();
if (i*i+ii*ii<) then
begin
// 以为半径的圆内的点设为蓝色
ImagecanvasPenColor:=claqua;
a:=StrToInt(LabelCaption);
LabelCaption:=IntToStr(a+);
//显示当前点的坐标
LabelCaption:=IntToStr(ImageCanvasPenPosX);
LabelCaption:=IntToStr(ImageCanvasPenPosY);
end
else
begin
// 超出这个区域的点都在圆外设为黄色
ImageCanvasPenColor:=clyellow;
b:=StrToInt(LabelCaption);
LabelCaption:=IntToStr(b+);
end;
// 画点(长为像素的直线)
ImageCanvasMoveTo(iii);
ImageCanvasLineTo(iii+);
// 计算pi的值
pi:=(*(StrToInt(LabelCaption))/(StrToInt(LabelCaption)+StrToInt(LabelCaption)));
LabelCaption:=FloatToStr(pi);
// Label显示的是最接近真实pi的值
piok:=StrToFloat(LabelCaption);
//得出最接近的圆周率值 piok
if (abs(pi))<(abs(piok)) then
LabelCaption:=FloatToStr(pi);
end;
最后加入两个SpeedButton作为开始和暂停按钮代码分别是TimerEnabled:=true;和TimerEnabled:=false;好了程序这样就完成了赶快按下F亲自模拟一下π的计算吧!
三小结
虽然程序并没有采用圆周率的算法但能通过随机数对π进行逼近而由无数点描成的美妙圆弧让我们歎为观止其实这样的思想可以用于许多场合比如对某个数学定理或者自然规律(彩票?)进行模拟希望这样的思路对您有所启发
[] []