程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 使用Delphi編寫圓周率模擬器

使用Delphi編寫圓周率模擬器

編輯:Delphi

  圓周率π是個古老的東西,早在1700多年前祖沖之已將其值精確到小數點後7位,而如今通過計算機程序已能算到十億位之多!我是個圓周率愛好者,這個“愛好”至少是出於對這個無理數的熱衷,我不但可以背誦到小數點後100位,而且還收藏著從網上找到幾個計算π的程序,你有興趣可以到我的小站nihg.yeah.Net找一下。

  一、模擬器原理

  本程序並使用計算π值的算法,她只是一個概率模擬,即在邊長為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親自模擬一下π的計算吧!

  三、小結

  雖然程序並沒有采用圓周率的算法,但能通過隨機數對π進行逼近,而由無數點描成的美妙圓弧讓我們歎為觀止。其實,這樣的思想可以用於許多場合,比如對某個數學定理或者自然規律(彩票?)進行模擬,希望這樣的思路對您有所啟發。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved