快速业务通道

用Delphi编写圆周率模拟器

作者 凌众技术 来源 互联网 浏览 发布时间 2012-01-14

圆周率π是个古老的东西,早在1700多年前祖冲之已将其值精确到小数点后7位,而如今通过计算机程序已能算到十亿位之多!我是个圆周率爱好者,这个“爱好”至少是出于对这个无理数的热衷,我不但可以背诵到小数点后100位,而且还收藏着从网上找到几个计算π的程序,你有兴趣可以到我的小站nihg.yeah.net找一下。

一、模拟器原理

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

    蓝色区内点个数:总个数≈蓝色面积:总面积 
    蓝色区内点个数:总个数≈圆面积/4:总面积 
    蓝色区内点个数:总个数≈π×200×200/4:200×200 
    π≈ 4×蓝色区内点个数/总个数

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

二、程序设计

    打开Delphi 7,首先按照图1设计窗体:

程序首先在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);
    //显示当前点的坐标

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号