如何使用Delphi编写圆周率模拟器?
|
软件开发网 www.mscto.com 一、模拟器原理 软件开发网 www.mscto.com 本程序并使用计算π值的算法,她只是一个概率模拟,即在边长为200的正方形内随机产生多个点,将点以圆弧为界分开统计,由于点的个数很多,直至几乎布满整个区域。此时,点的个数就可以看作就是它所在区域的面积。可以得到如下推导: 软件开发网 www.mscto.com 蓝色区内点个数:总个数≈蓝色面积:总面积 蓝色区内点个数:总个数≈圆面积/4:总面积 软件开发网 www.mscto.com 蓝色区内点个数:总个数≈π×200×200/4:200×200 软件开发网 www.mscto.com π≈ 4×蓝色区内点个数/总个数 当然,点的位置会重复,所以结果与π值是有差别的,不过,当点足够多时,可以看到一个非常接近的结果。 二、程序设计 程序首先在Image1控件区域内画一个边长为200的正方形作为程序的演示窗口,故FormCreate事件如下: procedure TForm1.FormCreate(Sender: TObject); begin // 画亮绿色的正方形演示框 Image1.Canvas.Brush.Color:=clBlack; Image1.Canvas.FillRect(Rect(0,0,199,199)); Image1.Canvas.Pen.Color:=cllime; Image1.Canvas.Rectangle(0,0,199,199); DoubleBuffered := True; end; 接着放入一个Timer实现点的绘制以及π的计算: procedure TForm1.Timer1Timer(Sender: TObject); var a,b,i,ii:longint; pi,piok:single; 软件开发网 www.mscto.com
begin // 随机产生坐标点 i:=random(200); ii:=random(200); if (i*i ii*ii<40000) then begin // 以200为半径的圆内的点设为蓝色 Image1.canvas.Pen.Color:=claqua; a:=StrToInt(Label1.Caption); Label1.Caption:=IntToStr(a 1); //显示当前点的坐标 软件开发网 www.mscto.com Label6.Caption:=IntToStr(Image1.Canvas.PenPos.X); Label7.Caption:=IntToStr(Image1.Canvas.PenPos.Y); end else begin // 超出这个区域的点都在圆外设为黄色 源代码网推荐 源代码网供稿. |
