三次Bezier曲線_第1頁
三次Bezier曲線_第2頁
三次Bezier曲線_第3頁
三次Bezier曲線_第4頁
三次Bezier曲線_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、三次Bezier曲線一、程序設(shè)計功能:1.設(shè)計繪圖窗口,能實現(xiàn)數(shù)據(jù)的多次輸入;2.具有多次繪圖功能,能實現(xiàn)不同數(shù)據(jù)的繪圖;3.具有清屏功能,在畫完該次圖形后,清除圖像并重建坐標系,4.具有數(shù)據(jù)完整性檢測功能,當數(shù)據(jù)輸入不完整時,通過彈窗提示用戶數(shù)據(jù)輸入不完整。二、程序設(shè)計思想:先在草稿紙上求出三次Bezier曲線的各坐標參數(shù)前的系數(shù)表達式:a1 = -px(0) + 3 * px(1) - 3 * px(2) + px(3) b1 = 3 * px(0) - 6 * px(1) + 3 * px(2) c1 = -3 * px(0) + 3 * px(1) d1 = px(0) a2 = -p

2、y(0) + 3 * py(1) - 3 * py(2) + py(3) b2 = 3 * py(0) - 6 * py(1) + 3 * py(2) c2 = -3 * py(0) + 3 * py(1) d2 = py(0)然后根據(jù)三次Bezier曲線的特點來定義為以u為變量的函數(shù),然后根據(jù)取點速率的不同來繪制相應(yīng)四個頂點的曲線。三、程序代碼:Private Sub Command1_Click()Picture1.DrawWidth = 2Picture1.FontSize = 12 '此處定義繪制坐標系時的字體大小,因為后面程序要用到字體設(shè)置,故此處字體設(shè)置要重新聲明,不可用系

3、統(tǒng)默認的字體,否則再次繪制圖形時,坐標由于字體過大而很難看Picture1.Scale (-300, 300)-(300, -300) '定義PictureBox坐標系Picture1.Line (-300, 0)-(300, 0)Picture1.Line (0, 300)-(0, -300) 'VB編譯系統(tǒng)中,其默認的是在Form(窗體)中畫圖,當需要在其他屬性框中畫圖時,需要加上其對應(yīng)的屬性框名稱Picture1.CurrentX = 270: Picture1.CurrentY = 40: Picture1.Print "X"Picture1.Cur

4、rentX = 15: Picture1.CurrentY = 285: Picture1.Print "Y"Picture1.FontSize = 9 '坐標上的數(shù)字字體小一些For i = -280 To 280 Step 40Picture1.Line (i, 0)-(i, 8)Picture1.CurrentX = i - 12: Picture1.CurrentY = -5: Picture1.Print iNext iFor j = -280 To -40 Step 40Picture1.Line (0, j)-(8, j)Picture1.Curren

5、tX = -28: Picture1.CurrentY = j + 10: Picture1.Print jNext jFor j = 40 To 280 Step 40Picture1.Line (0, j)-(8, j)Picture1.CurrentX = -28: Picture1.CurrentY = j + 10: Picture1.Print jNext j Dim px(4) As Double '定義控制點的x坐標的數(shù)組 Dim py(4) As Double '定義控制點的y坐標的數(shù)組 Dim a1, b1, c1, d1 As Double '定義

6、x系數(shù) Dim a2, b2, c2, d2 As Double '定義y系數(shù) Dim x, y, u As Double '定義曲線中的自變量u和變量x,y If (Not IsNumeric(Text1) Or Not IsNumeric(Text2) Or Not IsNumeric(Text3) Or Not IsNumeric(Text4) _ Or Not IsNumeric(Text5) Or Not IsNumeric(Text6) Or Not IsNumeric(Text7) Or Not IsNumeric(Text8) ThenMsgBox "

7、對不起!系統(tǒng)檢測到數(shù)據(jù)輸入不完整,請您輸入完整后繪圖。謝謝配合!", , "友情提示"Else px(0) = Text1.Text: py(0) = Text2.Text px(1) = Text3.Text: py(1) = Text4.Text px(2) = Text5.Text: py(2) = Text6.Text px(3) = Text7.Text: py(3) = Text8.Text Picture1.FontSize = 18 '設(shè)置字體,為顯示輸入的四個點設(shè)置字體大小 Picture1.CurrentX = px(0): Pictu

8、re1.CurrentY = py(0): Picture1.Print "P" 0 'P0單獨打印 For i = 0 To 2 Picture1.DrawWidth = 1.5 Picture1.Line (px(i), py(i)-(px(i + 1), py(i + 1), vbGreen: Picture1.Print "P" i + 1 'P1,P2,P3用for循環(huán)打印 Next i For i = 0 To 3 '繪制四個圓點,此處代碼可優(yōu)化,亦可用circle語句畫小圓后填充顏色 Picture1.DrawWid

9、th = 7 Picture1.Line (px(i), py(i)-(px(i) + 1, py(i) - 1) Next i a1 = -px(0) + 3 * px(1) - 3 * px(2) + px(3) '計算x和y的參數(shù) b1 = 3 * px(0) - 6 * px(1) + 3 * px(2) c1 = -3 * px(0) + 3 * px(1) d1 = px(0) a2 = -py(0) + 3 * py(1) - 3 * py(2) + py(3) b2 = 3 * py(0) - 6 * py(1) + 3 * py(2) c2 = -3 * py(0)

10、+ 3 * py(1) d2 = py(0) For u = 0 To 1 Step 0.00001'每當u增加0.00001求一次x和y x = a1 * u 3 + b1 * u * u + c1 * u + d1 '求x的值 y = a2 * u 3 + b2 * u * u + c2 * u + d2 '求y的值 If u = 0 Then Picture1.CurrentX = x '設(shè)置畫線起點 Picture1.CurrentY = y Else Picture1.DrawWidth = 3 Picture1.Line -(x, y), RGB(2

11、55, 0, 0)'連點成線 End If Next uEnd IfEnd SubPrivate Sub Command2_Click() '用于清空輸入數(shù)據(jù) Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" Text6.Text = "" Text7.Text = "" Text8.Text = ""End S

12、ubPrivate Sub Command3_Click() '清屏后再次繪制坐標系Picture1.ClsPicture1.DrawWidth = 2Picture1.FontSize = 12 '此處定義繪制坐標系時的字體大小,因為后面程序要用到字體設(shè)置,故此處字體設(shè)置要重新聲明,不可用系統(tǒng)默認的字體,否則再次繪制圖形時,坐標由于字體過大而很難看Picture1.Scale (-300, 300)-(300, -300) '定義PictureBox坐標系Picture1.Line (-300, 0)-(300, 0)Picture1.Line (0, 300)-(0

13、, -300) 'VB編譯系統(tǒng)中,其默認的是在Form(窗體)中畫圖,當需要在其他屬性框中畫圖時,需要加上其對應(yīng)的屬性框名稱Picture1.CurrentX = 270: Picture1.CurrentY = 40: Picture1.Print "X"Picture1.CurrentX = 15: Picture1.CurrentY = 285: Picture1.Print "Y"Picture1.FontSize = 9For i = -280 To 280 Step 40Picture1.Line (i, 0)-(i, 8)Pictu

14、re1.CurrentX = i - 12: Picture1.CurrentY = -5: Picture1.Print iNext iFor j = -280 To -40 Step 40Picture1.Line (0, j)-(8, j)Picture1.CurrentX = -28: Picture1.CurrentY = j + 10: Picture1.Print jNext jFor j = 40 To 280 Step 40Picture1.Line (0, j)-(8, j)Picture1.CurrentX = -28: Picture1.CurrentY = j + 1

15、0: Picture1.Print jNext jEnd SubPrivate Sub Form_Load() '預(yù)輸入數(shù)據(jù),避免調(diào)試時多次輸入數(shù)據(jù),其隨窗體運行而顯示 Text1.Text = -260: Text2.Text = -230 '冒號用于多條語句并行書寫,以減小代碼所占空間 Text3.Text = 260: Text4.Text = -230 Text5.Text = 200: Text6.Text = 230 Text7.Text = -260: Text8.Text = 230End SubVB程序運行結(jié)果圖片展示:第三次程序設(shè)計心得在三次Bezier曲線的程序設(shè)計中,明白了計算機對于圖行處理的能力是相當強的。對于VB而言,其能根據(jù)取點速率的不同而精確確定相應(yīng)圖形的圖像,能很好的滿足人們在日常工作中的圖像需求。在本次程序設(shè)計中花費了大量時間在程序優(yōu)化上,特別是在界面美化上。因為我始終覺得一個良好的可執(zhí)行程序不僅要具有精確計算的能力及繪圖能力,還應(yīng)該具有良好的用戶體驗界面,真正

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論