如何使用Delphi编写圆周率模拟器?
2008-02-23 07:14:26来源:互联网 阅读 ()
一、模拟器原理
本程序并使用计算π值的算法,她只是一个概率模拟,即在边长为200的正方形内随机产生多个点,将点以圆弧为界分开统计,由于点的个数很多,直至几乎布满整个区域。此时,点的个数就可以看作就是它所在区域的面积。可以得到如下推导:
蓝色区内点个数:总个数≈蓝色面积:总面积
蓝色区内点个数:总个数≈圆面积/4:总面积
蓝色区内点个数:总个数≈π×200×200/4:200×200
π≈ 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;
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);
//显示当前点的坐标
Label6.Caption:=IntToStr(Image1.Canvas.PenPos.X);
Label7.Caption:=IntToStr(Image1.Canvas.PenPos.Y);
end
else
begin
// 超出这个区域的点都在圆外设为黄色
Image1.Canvas.Pen.Color:=clyellow;
b:=StrToInt(Label2.Caption);
Label2.Caption:=IntToStr(b 1);
end;
// 画点(长为1像素的直线)
Image1.Canvas.MoveTo(i,ii);
Image1.Canvas.LineTo(i,ii 1);
// 计算pi的值
pi:=(4*(StrToInt(Label1.Caption))/(StrToInt(Label1.Caption) StrToInt(Label2.Caption)));
Label3.Caption:=FloatToStr(pi);
// Label4显示的是最接近真实pi的值。
piok:=StrToFloat(Label4.Caption);
//得出最接近的圆周率值 piok
if (abs(pi-3.141592653589))<(abs(piok-3.141592653589)) then
Label4.Caption:=FloatToStr(pi);
end;
最后加入两个SpeedButton作为开始和暂停按钮,代码分别是Timer1.Enabled:=true;和Timer1.Enabled:=false;。好了,程序这样就完成了,赶快按下F9亲自模拟一下π的计算吧!
三、小结
虽然程序并没有采用圆周率的算法,但能通过随机数对π进行逼近,而由无数点描成的美妙圆弧让我们叹为观止。其实,这样的思想可以用于许多场合,比如对某个数学定理或者自然规律(彩票?)进行模拟,希望这样的思路对您有所启发。
(T127)
上一篇: 拯救Delphi:中国开源社区的责任
下一篇: 关于基于Delphi平台的接口编程入门
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash