人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

用Delphi編寫圓周率模擬器

用Delphi編寫圓周率模擬器

更新時間:2022-08-19 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

  圓周率π是個古老的東西,早在1700多年前祖沖之已將其值精確到小數(shù)點后7位,而如今通過電腦程序已能算到十億位之多!我是個圓周率愛好者,這個“愛好”至少是出于對這個無理數(shù)的熱衷,我不但可以背誦到小數(shù)點后100位,而且還收藏著從網(wǎng)上找到的幾個計算π的程序,你有興趣可以到我的小站nihg.yeah.net找一下。文章中的源程序以及可執(zhí)行程序可以在http://www.cfan.com.cn/11program/200502/htkdma.html找到。

1.模擬器原理

  本程序并不使用計算π值的算法,它只是一個概率模擬,即在邊長為200的正方形內(nèi)隨機產(chǎn)生多個點,將點以圓弧為界分開統(tǒng)計,由于點的個數(shù)很多,直至幾乎布滿整個區(qū)域。此時,點的個數(shù)就可以看作就是它所在區(qū)域的面積。可以得到如下推導(dǎo):

(1)藍色區(qū)內(nèi)點個數(shù):總個數(shù)≈藍色面積:總面積

(2)藍色區(qū)內(nèi)點個數(shù):總個數(shù)≈圓面積/4:總面積

(3)藍色區(qū)內(nèi)點個數(shù):總個數(shù)≈π×200×200/4:200×200

(4)π≈ 4×藍色區(qū)內(nèi)點個數(shù)/總個數(shù)

  當(dāng)然,點的位置會重復(fù),所以結(jié)果與π值是有差別的,不過,當(dāng)點足夠多時,可以看到一個非常接近的結(jié)果。

2.程序設(shè)計

  打開Delphi 7,首先按照圖1設(shè)計窗體(見圖)。

  程序首先在Image1控件區(qū)域內(nèi)畫一個邊長為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實現(xiàn)點的繪制以及π的計算:
procedure TForm1.Timer1Timer(Sender: TObject);
var
a,b,i,ii:longint;
pi,piok:single;
begin
// 隨機產(chǎn)生坐標(biāo)點
i:=random(200);
ii:=random(200);

if (i*i+ii*ii<40000) then
begin
// 以200為半徑的圓內(nèi)的點設(shè)為藍色
Image1.canvas.Pen.Color:=claqua;
a:=StrToInt(Label1.Caption);
Label1.Caption:=IntToStr(a+1);
//顯示當(dāng)前點的坐標(biāo)
Label6.Caption:=IntToStr(Image1.Canvas.PenPos.X);
Label7.Caption:=IntToStr(Image1.Canvas.PenPos.Y);
end
else
begin
// 超出這個區(qū)域的點都在圓外設(shè)為黃色
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;

用Delphi編寫圓周率模擬器

  最后加入兩個SpeedButton作為開始和暫停按鈕,代碼分別是Timer1.EnableD:=true;和Timer1.EnableD:=false;。好了,程序這樣就完成了,趕快按下F9親自模擬一下π的計算吧!

3.小結(jié)

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


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 大丰市| 龙里县| 长垣县| 新津县| 富锦市| 凤山市| 吉木乃县| 扬州市| 阿瓦提县| 普宁市| 兴隆县| 富川| 杨浦区| 嘉荫县| 江陵县| 宜兰市| 台山市| 高雄县| 大厂| 三河市| 桦南县| 喀喇沁旗| 青州市| 丹棱县| 育儿| 镇原县| 桦南县| 凌海市| 鄂伦春自治旗| 会同县| 沈丘县| 睢宁县| 乡宁县| 南和县| 攀枝花市| 乐平市| 依兰县| 屏边| 阳新县| 兰州市| 武义县|