【文章內(nèi)容簡介】
sx按鈕的標(biāo)題Command4Captionhx按鈕的標(biāo)題Text1Caption500文本的內(nèi)容Text2Caption500文本的內(nèi)容在代碼窗口中輸入下列代碼:Private Sub Command3_Click() Dim k As Integer 39。沿x軸方向劃分最小外接矩形 Dim j As Integer j = 1 p = Val() k = ( ) \ p sx(0) = Do While j = k sx(j) = sx(j 1) + p j = j + 1 Loop sx(j + 1) = 39。k = 0 39。Do While k = j + 1 39。Line (sx(k), )(sx(k), ) 39。k = k + 1 39。Loop End SubPrivate Sub Command4_Click() Dim k1 As Single 39。沿y軸方向劃分最小外接矩形 Dim j1 As Integer j1 = 1 q = Val() k1 = ( ) \ q hx(0) = Do While j1 = k1 hx(j1) = hx(j1 1) + q j1 = j1 + 1 Loop hx(j1 + 1) = 39。k1 = 0 39。Do While k1 = j1 + 1 39。Line (, hx(k1))(, hx(k1)) 39。k1 = k1 + 1 39。LoopEnd Sub運(yùn)行結(jié)果如圖43:圖 43第四步:判斷哪些小矩形位于五邊形內(nèi),哪些在五邊形外,對(duì)此只需判斷這些小矩形的中點(diǎn)的坐標(biāo)是否在五邊形內(nèi)。判斷小矩形在五邊形內(nèi)還是外有三種方法,現(xiàn)分別介紹如下:第一種方法是求交法。經(jīng)過所有小矩形的中點(diǎn)畫一條線,判斷這條線與五邊形的關(guān)系,首先排除與五邊形不相交的那些線。對(duì)于相交的那些線,求出它們與五邊形的交點(diǎn),判斷這些交點(diǎn)是位于該中心點(diǎn)的兩側(cè)還是一側(cè),若交點(diǎn)位于中心點(diǎn)的兩側(cè),則該中心點(diǎn)位于五邊形內(nèi);若交點(diǎn)是位于中心的一側(cè)的話,那么該中心點(diǎn)就不在五邊形內(nèi),即在五邊形外。如圖44所示,1號(hào)點(diǎn)與五邊形的交點(diǎn)位于1號(hào)點(diǎn)的同一側(cè),所以可以得出1號(hào)點(diǎn)不位于五邊形的內(nèi)部,而2號(hào)點(diǎn)與五邊形的交點(diǎn)位于2號(hào)點(diǎn)的兩側(cè),所以2號(hào)點(diǎn)位于五邊形的內(nèi)部。圖 44 第二種方法是將五邊形的五條邊柵格化。將五邊形的五條邊分別與小矩形進(jìn)行求交,對(duì)每條邊所經(jīng)過的小矩形進(jìn)行賦值(假設(shè)設(shè)為5),對(duì)五邊形內(nèi)部也進(jìn)行賦值(假設(shè)設(shè)為0),對(duì)所有0值的小矩形進(jìn)行填充,直到遇見屬性為5的小矩形為止停止填充。如圖45所示。55555500055500000555000000550000005500000555550055555圖 45第三種方法是面積法。如果小矩形的中心點(diǎn)與五邊形的各個(gè)頂點(diǎn)連接組成的三角形的面積之和等于五邊形的面積,那么該中心點(diǎn)就位于五邊形內(nèi);如果小矩形的中心點(diǎn)與五邊形的各個(gè)頂點(diǎn)連接組成的三角形的面積之和不等于五邊形的面積,那么該中心點(diǎn)就位于五邊形外。(五邊形的面積用辛普森法求得,三角形面積用公式m=s,s=(a+b+c)/2,a、b、c為三角形的邊長)。如圖46所示,1號(hào)點(diǎn)位于多邊形的內(nèi)部,它與多邊形的各個(gè)頂點(diǎn)連接組成的三角形的面積之和等于多邊形的面積;而2號(hào)點(diǎn)位于多邊形的外部,它與多邊形各個(gè)頂點(diǎn)連接組成的三角形的面積之和不等于多邊形的面積。圖 46此方法僅僅適用于凸多邊形,對(duì)于凹多邊形就會(huì)發(fā)生錯(cuò)誤,因?yàn)榧词怪行狞c(diǎn)位于多邊形內(nèi),但是它與多邊形的各個(gè)頂點(diǎn)連接組成的三角形的面積之和也有可能不等于多邊形的面積。如圖47所示,2號(hào)雖然位于多邊形的內(nèi)部,但它與多邊形的各個(gè)頂點(diǎn)連接組成的三角形的面積之和并不等于多邊形的面積。由此可知面積法在這種情況下是不適用的。圖 47這里為了對(duì)多邊形進(jìn)行填充用的是第三種方法,即面積法。具體的實(shí)施步驟如下:在窗體設(shè)計(jì)器中增加4個(gè)命令按鈕Command58,設(shè)置對(duì)象的屬性,如表43 表 43對(duì)象屬性屬性值說明Command5Captiondqmj按鈕的標(biāo)題Command6Captionqzd按鈕的標(biāo)題Command7Captionqjl按鈕的標(biāo)題Command8Captionsqmj按鈕的標(biāo)題在代碼窗口輸入下列代碼:Private Sub Command5_Click() Dim i As Integer, area1 As Double 39。用辛普森法求多邊形的面積 Dim j As Integer s = 0 Do While i 4 area1 = (your(i).y + your(i + 1).y) * (your(i).x your(i + 1).x) / 2 s = s + area1 i = i + 1 Loop area1 = (your(4).y + your(0).y) * (your(4).x your(0).x) / 2 s = s + area1 s = Abs(s) Do While j 4 39。求多邊形各邊長的長度 bc(j) = Sqr((your(j).x your(j + 1).x) ^ 2 + (your(j).y your(j + 1).y) ^ 2) j = j + 1 Loop If j = 4 Then bc(4) = Sqr((your(4).x your(0).x) ^ 2 + (your(4).y your(0).y) ^ 2) End IfEnd SubPrivate Sub Command6_Click()Dim i As Integer, j As Integeri = 0Do While i 50 39。求劃分得到的小矩形的中心坐標(biāo) j = 0 Do While j 50 zd(i, j).x = sx(i) + p / 2 zd(i, j).y = hx(j) + q / 2 j = j + 1 Loop i = i + 1LoopEnd SubPrivate Sub Command7_Click() Dim i As Integer, j As Integer, k As Integer, n As Integer i = 0 39。求小矩形中心到各頂點(diǎn)的距離 Do While i 50 j = 0 Do While j 50 n = 0 Do While n 5 L(i, j, n) = Sqr((your(n).x zd(i, j).x) ^ 2 + (your(n).y zd(i, j).y) ^ 2) n = n + 1 Loop j = j + 1 Loop i = i + 1 Loop End SubPrivate Sub Command8_Click() Dim bzc As Double Dim m As Double Dim k As Integer Dim i As Integer Dim j As Integer i = 0 39。用三角形法求多邊形面積 Do While i 50 j = 0 Do While j 50 k = 0 m = 0 Do While k 4 bzc = (bc(k) + L(i, j, k) + L(i, j, k + 1)) / 2 mj(i, j, k) = Sqr(bzc * (bzc bc(k)) * (bzc L(i, j, k)) * (bzc L(i, j, k + 1))) m = m + mj(i, j, k) k = k + 1 Loop bzc = (bc(4) + L(i, j, 4) + L(i, j, 0)) / 2 mj(i, j, 4) = Sqr(bzc * (bzc bc(4)) * (bzc L(i, j, 4)) * (bzc L(i, j, 0))) m = m + mj(i, j, 4) mjz(i, j) = Abs(m) j = j + 1 Loop i = i + 1 LoopEnd Sub第五步:對(duì)位于多邊形內(nèi)部的小矩形進(jìn)行填充。在這里是對(duì)這些小矩形填充小圓圈。對(duì)于有些小矩形,雖然它的中心點(diǎn)也位于多邊形的內(nèi)部,但是它到多邊形的一條邊的距離小于所要填充的小圓圈的半徑,這種情況下,這些小矩形不進(jìn)行填充,那么就需要判斷小矩形的中心點(diǎn)到多邊形的邊的距離是否大于所填小圓圈的半徑。在窗體設(shè)計(jì)器中增加一個(gè)命令按鈕Command9,設(shè)置對(duì)象的屬性,如表44 表 44對(duì)象屬性屬性值說明Command9CaptionCircle按鈕的標(biāo)題在代碼窗口輸入下列代碼:Private Sub mang11_Click() Dim i As Integer, j As Integer, k As Integer, flag As Integer qp = Val() 39。填充圓 i = 0 Do While i 50 j = 0 Do While j 50 If Abs(s mjz(i, j)) Then k = 0 flag = 1 Do While k 5 If (2 * mj(i, j, k) / bc(k)) p / qp Then flag = 0 End If k = k + 1 Loop If flag = 1 Then Circle (zd(i, j).x, zd(i, j).y), p / qp End If End If j = j + 1 Loop i = i + 1 LoopEnd Sub運(yùn)行結(jié)果如圖48 圖 48 第三節(jié) 設(shè)計(jì)使用說明書在VB中,建立應(yīng)用程序用戶界面,選擇“新建”工程,雙擊窗體的空白部分,進(jìn)入到代碼編輯窗口,單擊“對(duì)象”下拉列表框右邊的箭頭按鈕,從中選擇Form對(duì)象,在:“過程”下拉列表框中選擇MouseDown事件,再選擇Load事件,編寫畫任意多邊形的代碼,如圖49。 圖 49進(jìn)入窗體設(shè)計(jì)器,在窗體中增加2個(gè)命令按鈕Command12,設(shè)置對(duì)象屬性,到代碼窗口編寫畫多邊形最小外接矩形的代碼;在窗體設(shè)計(jì)器中增加2個(gè)命令按鈕和2個(gè)文本框,文本框用于輸入小矩形的長度和寬度,設(shè)置對(duì)象屬性,到代碼窗口編寫劃最小外接矩形的代碼;在窗體設(shè)計(jì)器中增加4個(gè)命令按鈕Command58,設(shè)置對(duì)象的屬性,編寫判斷小矩形是否位于多邊形內(nèi)部的代碼以及進(jìn)行填充,如圖410。圖 410運(yùn)行程序,點(diǎn)擊“運(yùn)行”的圖標(biāo),在運(yùn)行界面依次點(diǎn)擊各控件按鈕,如圖411。 圖 411最后,就可以出現(xiàn)上一節(jié)那樣的結(jié)果,詳細(xì)見上一節(jié)。結(jié) 束 語第一章主要介紹了有關(guān)VB的基礎(chǔ)知識(shí)。隨著微型計(jì)算機(jī)的快速發(fā)展,眾多的軟件開發(fā)者已從原來的DOS軟件開發(fā)轉(zhuǎn)向Windows。許多商用軟件公司為適應(yīng)這一趨勢(shì)推出了不少Windows環(huán)境下的軟件開發(fā)工具,如Visual C++、Visual Basic、Borland C++、Delphi、PowerBuilder等等。VB為用戶最易掌握,成為當(dāng)今世界上最為廣泛的軟件開發(fā)工具之一。 本章主要介紹了VB的基礎(chǔ)知識(shí),易為初學(xué)者理解、掌握、運(yùn)用。包括了VB的概念、發(fā)展過程、特點(diǎn)、對(duì)象的事件、方法、窗體、窗口等等。此次畢業(yè)設(shè)計(jì)的重點(diǎn)放在解決實(shí)際問題上,所以本章主要介紹了