圓周率π是個(gè)古老的東西,早在1700多年前祖沖之已將其值精確到小數(shù)點(diǎn)后7位,而如今通過計(jì)算機(jī)程序已能算到十億位之多!我是個(gè)圓周率愛好者,這個(gè)“愛好”至少是出于對(duì)這個(gè)無(wú)理數(shù)的熱衷,我不但可以背誦到小數(shù)點(diǎn)后100位,而且還收藏著從網(wǎng)上找到幾個(gè)計(jì)算π的程序,你有興趣可以到我的小站nihg.yeah.net找一下。
一、模擬器原理
本程序并使用計(jì)算π值的算法,她只是一個(gè)概率模擬,即在邊長(zhǎng)為200的正方形內(nèi)隨機(jī)產(chǎn)生多個(gè)點(diǎn),將點(diǎn)以圓弧為界分開統(tǒng)計(jì),由于點(diǎn)的個(gè)數(shù)很多,直至幾乎布滿整個(gè)區(qū)域。此時(shí),點(diǎn)的個(gè)數(shù)就可以看作就是它所在區(qū)域的面積??梢缘玫饺缦峦茖?dǎo):
藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù):總個(gè)數(shù)≈藍(lán)色面積:總面積
藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù):總個(gè)數(shù)≈圓面積/4:總面積
藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù):總個(gè)數(shù)≈π×200×200/4:200×200
π≈ 4×藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù)/總個(gè)數(shù)
當(dāng)然,點(diǎn)的位置會(huì)重復(fù),所以結(jié)果與π值是有差別的,不過,當(dāng)點(diǎn)足夠多時(shí),可以看到一個(gè)非常接近的結(jié)果。
二、程序設(shè)計(jì)
打開Delphi 7,首先按照?qǐng)D1設(shè)計(jì)窗體:
程序首先在Image1控件區(qū)域內(nèi)畫一個(gè)邊長(zhǎng)為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;
接著放入一個(gè)Timer實(shí)現(xiàn)點(diǎn)的繪制以及π的計(jì)算:
procedure TForm1.Timer1Timer(Sender: TObject);
var
a,b,i,ii:longint;
pi,piok:single;
begin
// 隨機(jī)產(chǎn)生坐標(biāo)點(diǎn)
i:=random(200);
ii:=random(200);
if (i*i+ii*ii<40000) then
begin
一、模擬器原理
本程序并使用計(jì)算π值的算法,她只是一個(gè)概率模擬,即在邊長(zhǎng)為200的正方形內(nèi)隨機(jī)產(chǎn)生多個(gè)點(diǎn),將點(diǎn)以圓弧為界分開統(tǒng)計(jì),由于點(diǎn)的個(gè)數(shù)很多,直至幾乎布滿整個(gè)區(qū)域。此時(shí),點(diǎn)的個(gè)數(shù)就可以看作就是它所在區(qū)域的面積??梢缘玫饺缦峦茖?dǎo):
藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù):總個(gè)數(shù)≈藍(lán)色面積:總面積
藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù):總個(gè)數(shù)≈圓面積/4:總面積
藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù):總個(gè)數(shù)≈π×200×200/4:200×200
π≈ 4×藍(lán)色區(qū)內(nèi)點(diǎn)個(gè)數(shù)/總個(gè)數(shù)
當(dāng)然,點(diǎn)的位置會(huì)重復(fù),所以結(jié)果與π值是有差別的,不過,當(dāng)點(diǎn)足夠多時(shí),可以看到一個(gè)非常接近的結(jié)果。
二、程序設(shè)計(jì)
打開Delphi 7,首先按照?qǐng)D1設(shè)計(jì)窗體:
程序首先在Image1控件區(qū)域內(nèi)畫一個(gè)邊長(zhǎng)為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;
接著放入一個(gè)Timer實(shí)現(xiàn)點(diǎn)的繪制以及π的計(jì)算:
procedure TForm1.Timer1Timer(Sender: TObject);
var
a,b,i,ii:longint;
pi,piok:single;
begin
// 隨機(jī)產(chǎn)生坐標(biāo)點(diǎn)
i:=random(200);
ii:=random(200);
if (i*i+ii*ii<40000) then
begin