当前位置:首页 > 网络编程 > 软件语言 > DELPHI > 如何使用Delphi编写圆周率模拟器?

如何使用Delphi编写圆周率模拟器?

点击次数:59 次 发布日期:2008-11-09 08:45:59 作者:源代码网
源代码网推荐
广告载入中
圆周率π是个古老的东西,早在1700多年前祖冲之已将其值精确到小数点后7位,而如今通过计算机程序已能算到十亿位之多!我是个圆周率爱好者,这个“爱好”至少是出于对这个无理数的热衷,我不但可以背诵到小数点后100位,而且还收藏着从网上找到几个计算π的程序,你有兴趣可以到我的小站nihg.yeah.net找一下。

软件开发网 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

// 超出这个区域的点都在圆外设为黄色


源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华