其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

用Delphi编写圆周率模拟器


发布日期:2019年04月23日
 
用Delphi编写圆周率模拟器
圆周率π是个古老的东西早在多年前祖沖之已将其值精确到小数点后而如今通过计算机程序已能算到十亿位之多!我是个圆周率爱好者这个爱好至少是出于对这个无理数的热衷我不但可以背诵到小数点后而且还收藏着从网上找到几个计算π的程序你有兴趣可以到我的小站找一下

模拟器原理

本程序并使用计算π值的算法她只是一个概率模拟即在边长为的正方形内随机产生多个点将点以圆弧为界分开统计由于点的个数很多直至几乎布满整个区域此时点的个数就可以看作就是它所在区域的面积可以得到如下推导

蓝色区内点个数总个数≈蓝色面积总面积

蓝色区内点个数总个数≈圆面积/总面积

蓝色区内点个数总个数≈π××/×

π≈ ×蓝色区内点个数/总个数

当然点的位置会重复所以结果与π值是有差别的不过当点足够多时可以看到一个非常接近的结果

程序设计

打开Delphi 首先按照图设计窗体

程序首先在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亲自模拟一下π的计算吧!

小结

虽然程序并没有采用圆周率的算法但能通过随机数对π进行逼近而由无数点描成的美妙圆弧让我们歎为观止

上一篇:Delphi实现数据库的拼音查询

下一篇:用Delphi2005和DUnit搭建敏捷开发平台