已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
江江江江南南南南大大大大學(xué)學(xué)學(xué)學(xué)畢畢畢畢業(yè)業(yè)業(yè)業(yè)設(shè)設(shè)設(shè)設(shè)計計計計論論論論文文文文論文題目論文題目論文題目論文題目參數(shù)曲線的快速生成算法參數(shù)曲線的快速生成算法參數(shù)曲線的快速生成算法參數(shù)曲線的快速生成算法姓姓姓姓名名名名學(xué)學(xué)學(xué)學(xué)院院院院信息工程學(xué)院信息工程學(xué)院信息工程學(xué)院信息工程學(xué)院專專專專業(yè)業(yè)業(yè)業(yè)計算機科學(xué)與技術(shù)計算機科學(xué)與技術(shù)計算機科學(xué)與技術(shù)計算機科學(xué)與技術(shù)指導(dǎo)老師指導(dǎo)老師指導(dǎo)老師指導(dǎo)老師日日日日期期期期2003年年年年6月月月月畢業(yè)論文參數(shù)曲線的快速生成算法1摘摘摘摘要要要要本畢業(yè)設(shè)計主要研究參數(shù)曲線的直接快速生成,要直接生成參數(shù)曲線就需對參數(shù)方程XFT,YGT,0T1的參數(shù)T每次增加一個步長,然后計算該點的X和Y坐標值并繪制該點。要逐點地生成參數(shù)曲線,就要求參數(shù)T每次增加的步長要使曲線前進的幅度不得超過一個象素長度,否則有可能跨過一個中間象素而產(chǎn)生斷點。為了提高曲線生成算法的速度,本畢業(yè)設(shè)計針對如何選擇最佳的步長進行比較討論,以使曲線前進的幅度在不超過一個象素的前提下,選擇盡量大的步長。為了進一步提高算法的速度,在前面討論的最佳步長的基礎(chǔ)上又采用了雙步逐點曲線生成算法,即將上述得到的步長增加一倍,以使算法的循環(huán)次數(shù)減少一半。由于步長增加一倍,這樣當曲線前進一步時,其幅度有時會大于一個象素的長度,這時我們通過插值的方法來確定跨過的那個中間象素。通過上述討論的算法能夠比較快速的逐點生成曲線,為了實現(xiàn)上述算法,本畢業(yè)設(shè)計使用VISUALC60為工具并以三次BEZIER曲線、普通參數(shù)曲線XFTX3T3X2T2X1TX0,YGTY3T3Y2T2Y1TY0,以及導(dǎo)師所給的一個特殊的曲線方程為例編程實現(xiàn)上述算法。關(guān)鍵詞關(guān)鍵詞關(guān)鍵詞關(guān)鍵詞參數(shù)曲線,逐點,雙步,VISUALC60作者二零零三年六月畢業(yè)論文參數(shù)曲線的快速生成算法2ABSTRACTTHISGRADUATIONPROJECTMAINRESEACHTHEDIRECTBORNOFTHEPARAMETERCURVEXFT,YGT,0LOADSTANDCURSORIDC_CROSS初始化該變量,該語句的作用是取得WINDOWS標準鼠標形狀句柄并賦給M_HCROSS,然后就可以通過CLASSWIZARD添加鼠標動作的消息處理函數(shù)。例如,要為程序添加鼠標左鍵單擊消息處理函數(shù),首先在打開的CLASSWIZARD對話框中的CLASSNAME組合框中選擇VIEW類,然后在OBJECTIDS列表框選中第一行,并在MESSAGE列表框中選中WM_LBUTTONDOWN一行,最后單擊ADDFUNCTION按鈕即可。類似的還可以為程序添加WM_RBUTTONDOWN(鼠標右鍵單擊)消息處理函數(shù)。因為需要逐點地生成曲線,因此在程序中需要使用到MFC(MICROSOFTFUNDATIONCLASS)中的CDC(設(shè)備上下文)類的成員函數(shù)SETPIXEL()來實現(xiàn)在屏幕上畫點,CDC類主要用于在指定設(shè)備上下文上(如窗口客戶區(qū)、打印機)進行繪圖、顯示文本等操作。畢業(yè)論文參數(shù)曲線的快速生成算法6第二章第二章第二章第二章計算機圖形學(xué)中常用的算法計算機圖形學(xué)中常用的算法計算機圖形學(xué)中常用的算法計算機圖形學(xué)中常用的算法21常用直線的算法常用直線的算法常用直線的算法常用直線的算法畫直線的算法有很多,例如數(shù)值微分法,中點畫線法,BRESENHAM化線算法等。在這里只介紹一個比較方便常用的中點畫線法。為了討論方便,本小節(jié)假定直線斜率在0、1之間。其他情況可參照下述討論進行處理。如圖所示,若直線在X方向增加一個單位,則在Y方向上的增量只能在0、1之間。假設(shè)X坐標為XP的各象素點中,與直線最近者已確定,為XP,YP,用實心小圓表示。那么,下一個與直線最近的象素只能是正右方的P1XP1,YP或右上方的P2XP1,YP1兩者之一,用空心小圓表示。再以M表示P1、P2的中點,即MXP1,YP05)。又設(shè)想Q是理想直線與垂直直線XXP1的交點。顯然,若M在Q的下方,則P2離直線近,應(yīng)取為下一個象素;否則應(yīng)取P1。這就是中點畫線法的基本原理。中點畫線算法每步迭代涉及的象素和中點示意圖下面來討論上述算法的實現(xiàn)。假設(shè)直線的起點和終點分別是X0,Y0,X1,Y1。則直線的方程為FX,YAXBYC0其中,AY0Y1,BX1X0,CX0YIX1Y0。對于直線上的點,F(xiàn)X,Y0;對于直線上方的點,F(xiàn)X,Y0;而對于直線下方的點FX,Y0時,則應(yīng)取正右方的P1。當D0時,二者一樣合適,可以隨便取一個。我們約定取正右方的P1。對每一個象素計算判別式D,根據(jù)它的符號確定下一個象素。至此可以寫出完整的算法。但是注意到D是XP和YP的線形函數(shù),可采用增量計算,提高運算效率。在D0的情況下,取正右方象素P1,欲判斷再下一個象素應(yīng)取哪個,應(yīng)計算D1FXP2,YP05AXP2BYP05CDA故D的增量為A。而若DFILLRECTLONGU3,N,NLONGF0,F1,F2,F3,G0,G1,G2,G3LONGA1,A2,A3,B1,B2,B3LONGV,W,M,T/計算NX的值LONGNXLABSX1X0LABSX3X2LABSX1X0LABSX3X2VX22X1X0WX33X1X2X0TV/WIFT0/計算NY的值LONGNYLABSY1Y0LABSY3Y2LABSY1Y0LABSY3Y2VY22Y1Y0WY33Y1Y2Y0TV/WIFT0NXUNXNYUNYNNXNYNXNY/將N的值減小1/2NN1/使F0,F1,F2,F3,G0,G1,G2,G3都為整數(shù)NNNN/計算當T0,T1/N,T2/N,T3/N時F與G的值F0NX0F1X0N1N1N13X1N1N13X2N1X3F2X0N2N2N26X1N2N212X2N28X3F3X0N3N3N39X1N3N327X2N327X3G0NY0G1Y0N1N1N13Y1N1N13Y2N1Y3G2Y0N2N2N26Y1N2N212Y2N28Y3G3Y0N3N3N39Y1N3N327Y2N327Y3/A1,A2,A3和B1,B2,B3分別表示F和G的一、二、三階差分A1F1F0A2F22F1F0A3F33F23F1F0B1G1G0B2G22G1G0B3G33G23G1G0LONGXX0,YY0LONGZ10,Z20/畫曲線的第一個點INTFX0,FY0PDCSETPIXELX,Y,RGB10,20,20/循環(huán)畫點FORINTI0ISETPIXELX,Y,RGB10,20,20FX0/XI1XI2時YI1YI2的情況IF2B1Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z2Z2B12NELSE/XI1XI2時YI1YI1的情況IFB12Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX1,Y,RGB10,20,20Z2Z2B1FX1ELSEIF2B1Z2NIFFY1PDCSETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSE/YI1YI2IFFY1PDCSETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z1Z1A12NXX2Z1Z1A12NFY0/XI1XI1時ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1畢業(yè)論文參數(shù)曲線的快速生成算法21PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0ELSE/XI1XI1時,YI1YI1的情況IFFX1|FY1PDCSETPIXELX,Y,RGB10,20,20FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20ELSEFX1IFFY1PDCSETPIXELX1,Y,RGB10,20,20FX0FY0Z2Z2B1ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20畢業(yè)論文參數(shù)曲線的快速生成算法22FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSE/XI1XI1時YI1YI2IFA12Z1SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0XX1Z1Z1A1NELSE/XI1XI時IF2A1Z1SETPIXELX,Y,RGB10,20,20ELSEFY1IF2B1Z2SETPIXELX,Y1,RGB10,20,20YY2畢業(yè)論文參數(shù)曲線的快速生成算法23Z2Z2B12NELSE/XI1XI時YI1YI1的情況IFFX1PDCSETPIXELX,Y1,RGB10,20,20FY0YY1Z2Z2B1NFX0ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20ELSEFY1IF2B1Z2SETPIXELX,Y1,RGB10,20,20FY0YY1Z2Z2B1NELSE/XI1XI時YI1YI2的情況PDCSETPIXELX,Y1,RGB10,20,20YY2Z2Z2B12NFX0Z1Z1A1ELSE/XI1XI1時IF2A1Z1SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0ELSE/XI1XI1時,YI1YI1的情況IFFX1|FY1PDCSETPIXELX,Y,RGB10,20,20FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20ELSEFX1IFFY1畢業(yè)論文參數(shù)曲線的快速生成算法25PDCSETPIXELX1,Y,RGB10,20,20FX0FY0Z2Z2B1ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSE/XI1XI1時,YI1YI2的情況IFA12Z1SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0XX1Z1Z1A1N畢業(yè)論文參數(shù)曲線的快速生成算法26/XI1XI2時ELSEIFFX1PDCSETPIXELX,Y,RGB10,20,20FX0IF2B1Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z2Z2B12NELSE/XI1XI2時,YI1YI1的情況IFB12Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX1,Y,RGB10,20,20Z2Z2B1FX1畢業(yè)論文參數(shù)曲線的快速生成算法27ELSEIF2B1Z2NIFFY1PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSE/XI1XI2時,YI1YI2的情況IFFY1PDCSETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z2Z2B12NXX2Z1Z1A12NFY0A1A1A2A2A2A3B1B1B2B2B2B3下圖為程序運行后繪制的三次BEZIER圖形畢業(yè)論文參數(shù)曲線的快速生成算法2835普通參數(shù)曲線方程的編程實現(xiàn)普通參數(shù)曲線方程的編程實現(xiàn)普通參數(shù)曲線方程的編程實現(xiàn)普通參數(shù)曲線方程的編程實現(xiàn)上一小節(jié)的程序通過使用雙步逐點算法實現(xiàn)了繪制三次BEZIER曲線,為了體現(xiàn)雙步逐點曲線生成算法的廣泛適用性,本小節(jié)將討論使用雙步逐點算法實現(xiàn)繪制一個普通參數(shù)曲線方程012233012233YTYTYTYTGYXTXTXTXTFX0T1,其中方程參數(shù)X3,X2,X1,X0,Y3,Y2,Y1,Y0為控制點坐標,可以由自己隨機選取。根據(jù)上述算法的討論,首先應(yīng)該先求出該曲線的最佳的N值。由前面的討論可知,N值應(yīng)該滿足條件N1T0MAXTF,為了求出最佳的N值,只要求出TF的最小上界即可。下面我們來求出其最小上界。對于曲線012233XTXTXTXTF,TF的最小上界應(yīng)該出現(xiàn)在FT的極值點處或曲線的端點處,即參數(shù)T0或T1處,因此應(yīng)該求出TF在曲線的兩端點處和其在兩端點之間的極值點處的函數(shù)值,并將其中的最大者作為其最小上界。由于我們采用了求函數(shù)的最大極值作為其上界,因此它是最小上界,因為該上界就在曲線上,如果它再小一點則必有曲線上的一點大于它。對曲線FT求導(dǎo)得,F(xiàn)T3X3T22X2TX1畢業(yè)論文參數(shù)曲線的快速生成算法29要求FT的極值點就要將其對T再次求導(dǎo)并令其導(dǎo)數(shù)為0,得FT6X3T2X20得T323XX,因此,F(xiàn)323XX3X3323XX22X2323XXX1X13223XX當T0時,F(xiàn)TX1當T1時,F(xiàn)T3X32X2X1根據(jù)以上的討論我們可得到該參數(shù)曲線的實現(xiàn)程序,以下的這段程序代碼為實現(xiàn)程序中的開始一段代碼,程序中剩下部分的代碼為循環(huán)畫點的FOR循環(huán)語句,與上一小節(jié)的程序中的FOR循環(huán)語句代碼相同,在這里就不再寫出。VOIDDRAWCURVEINTX0,INTX1,INTX2,INTX3,INTY0,INTY1,INTY2,INTY3,CDCPDCLONGN,NLONGF0,F1,F2,F3,G0,G1,G2,G3LONGA1,A2,A3,B1,B2,B3LONGM,T/計算NX的值LONGNXLABSX1LABS3X32X2X1LABSX1LABS3X32X2X1TX2/3X3IFT0/計算NX的值LONGNYLABSY1LABS3Y32Y2Y1LABSY1LABS3Y32Y2Y1TY2/3Y3IFT0NXNXNYNY/求最佳的N值NNXNYNXNY/將N值減小1/2畢業(yè)論文參數(shù)曲線的快速生成算法30NN1/使F0,F1,F2,F3,G0,G1,G2,G3都為整數(shù)NNNN/計算當T0,T1/N,T2/N,T3/N時F與G的值F0NX0F1X3NX2NNX1NNNX0F28X34NX22NNX1NNNX0F327X39NX23NNX1NNNX0G0NY0G1Y3NY2NNY1NNNY0G28Y34NY22NNY1NNNY0G327Y39NY23NNY1NNNY0/A1,A2,A3和B1,B2,B3分別表示F和G的一、二、三階差分A1F1F0A2F22F1F0A3F33F23F1F0B1G1G0B2G22G1G0B3G33G23G1G0LONGXX0,YY0LONGZ10,Z20INTFX0,FY0PDCSETPIXELX,Y,RGB10,20,20該程序剩下的代碼在此省略,請參考上一小節(jié)的程序代碼。其中,該函數(shù)的的參數(shù)X0,X1,X2,X3,Y0,Y1,Y2,Y3由程序運行后在對話框中輸入,其對話框如下圖畢業(yè)論文參數(shù)曲線的快速生成算法31在上述對話框中輸入控制點的坐標值后,點擊OK按鈕即可觀看到生成的參數(shù)曲線,如下圖所示。36使用雙步逐點曲線生成算法需要注意的一個問題使用雙步逐點曲線生成算法需要注意的一個問題使用雙步逐點曲線生成算法需要注意的一個問題使用雙步逐點曲線生成算法需要注意的一個問題在上述對話框中輸入控制點參數(shù)時要注意一個問題,即X3和Y3的值不能為0,如果X3和Y3之中任何一個取值為0,則在程序運行時將會出現(xiàn)錯誤。為什么會出現(xiàn)錯誤呢因為我們在前面討論求最佳的N值的時候,要求N值必須滿足條件N1T0MAXTF,因此我們需要對函數(shù)FT進行再次求導(dǎo)并令其為0,然后求出其極值點,對于曲線012233XTXTXTXTF,我們求出其一階導(dǎo)函數(shù)FT3X3T22X2TX1的的極值點為T323XX,觀察T的值即可發(fā)現(xiàn)T的分母為3X3,這就說明對于此方程,X3不可以為0,同理,Y3也不可以為0,否則程序運行就時會出現(xiàn)錯誤。實際上當X3和Y3為0時,該曲線012233XTXTXTXTF已經(jīng)不是三次曲線了,而變成了二次曲線FT0122XTXTX,我們需要對其重新計算討論其最佳的N值。在下面的一章中還會討論到類似的問題。畢業(yè)論文參數(shù)曲線的快速生成算法32第四章第四章第四章第四章導(dǎo)師所給的曲線方程的研究導(dǎo)師所給的曲線方程的研究導(dǎo)師所給的曲線方程的研究導(dǎo)師所給的曲線方程的研究41通過在屏幕上鼠標點擊若干點然后繪制曲線通過在屏幕上鼠標點擊若干點然后繪制曲線通過在屏幕上鼠標點擊若干點然后繪制曲線通過在屏幕上鼠標點擊若干點然后繪制曲線參數(shù)曲線SU1K2UU2A01K4U2U2B04U4U2111KIIIKB12U3U2BKU2BK1,I1,2是導(dǎo)師所給的一條曲線方程,其中的A0,B0,BI,BK,BK1為方程的控制點,并且由于在方程中存在表達式111KIIIKB,所以該方程的控制點的數(shù)目并不是確定的,而且方程中K的值也隨控制點的數(shù)目變化而變化。針對這條曲線導(dǎo)師要求我做到如下兩點1,通過在屏幕上用鼠標左鍵點擊若干點作為該曲線的控制點,然后點擊鼠標右鍵自動完成曲線繪制;2,通過在對話框中輸入5個控制點的坐標畫出該曲線。關(guān)于第二個問題,我們將在下一小節(jié)中討論,本小節(jié)我們將重點討論第一個問題。對于上述曲線,可以將其展開成如下的參數(shù)曲線形式SXU1K2UU2XA1K4U2U2X04U4U2111KIIIKX12U3U2XKU2XK1,I1,2SYU1K2UU2YA1K4U2U2Y04U4U2111KIIIKY12U3U2YKU2YK1,I1,2我們?nèi)匀幌扔懻揝XU的情況,對于SYU可以同理得到。為了方便討論,先將曲線SXU轉(zhuǎn)換成如下的形式SXU1KXA21KX03XKXK14111KIIIKXU21KXA41KX02XK4111KIIIKXUBK,I1,2通過上述轉(zhuǎn)換之后,可以發(fā)現(xiàn)該曲線實際上是以U為參數(shù)的二次曲線,因為控制點為A0,B0,BI,BK,BK1,所以可以知道K的值為所有的控制點數(shù)減去3。由于控制點的數(shù)目不確定,所以需要在程序中使用一個循環(huán)語句來完成表達式4111KIIIKX的計算。當控制點的數(shù)目確定了之后,隨之K的值也可以確定,因此整個曲線方程即可確定,就可以使用前面討論的雙步逐點算法編程完成此曲線的繪制。根據(jù)上一章最后一小節(jié)的討論,我們已經(jīng)知道了如何使用雙步算法生成參數(shù)曲線畢業(yè)論文參數(shù)曲線的快速生成算法33012233XTXTXTXTF,并可以通過在對話框中直接輸入X3,X2,X1,X0以Y3,Y2,Y1,Y0的值而完成曲線的繪制。而本小節(jié)所討論的曲線SXU當控制點的數(shù)目確定后即可展開成如曲線FT的形式,因此理論上可以先求出SXU的二次項U2和一次項U的系數(shù)即1KXA21KX03XKXK14111KIIIKX和1KXA41KX02XK4111KIIIKX以及常數(shù)項BK的值,然后將其做為FT的系數(shù)X2,X1,X0并以X3的值為0傳遞給曲線FT的實現(xiàn)程序來完成曲線SXU的繪制。而實際上,在上一章最后一小節(jié)的討論中,曾論述過曲線FT的系數(shù)X3與Y3不可以為0,否則程序運行會產(chǎn)生錯誤。所以,我們構(gòu)想首先使用雙步逐點算法編程實現(xiàn)二次參數(shù)曲線01220122YTYTYTGYXTXTXTFX0T1,的快速生成,然后用已經(jīng)計算出來的二次項U2和一次項U的系數(shù)以及常數(shù)項BK的值作為二次曲線的系數(shù)X2,X1,X0傳遞給繪制二次曲線的實現(xiàn)程序來完成SXU曲線的繪制?,F(xiàn)在來討論如何實現(xiàn)二次參數(shù)曲線的快速生成。對于上述的二次參數(shù)曲線,仍然先討論FT的情況,GT則同理可得。首先,我們應(yīng)該先求出其最佳的N值。由前面的討論可知,N值應(yīng)該滿足條件N1T0MAXTF,為了求出最佳的N值,只要求出TF的最小上界即可。下面來求出其最小上界。對于函數(shù)0122XTXTXTF,對其求導(dǎo)得FT2X2TX1,所以TF的最小上界應(yīng)該出現(xiàn)在曲線FT的的端點處,即當參數(shù)T0或T1處,因此應(yīng)該以TF在曲線的兩端點處的函數(shù)值中的大者作為其最小上界。于是當T0時,F(xiàn)TX1當T1時,F(xiàn)T2X2X1根據(jù)以上的討論以及前一章中對三次BEZIER曲線的實現(xiàn)程序的描述,同理可得到該算法的實現(xiàn)程序,以下的這段程序代碼為該算法實現(xiàn)程序中的開始一段,程序中剩下部分的代碼為循環(huán)畫點的FOR語句,與上一章中所給出BEZIER曲線的實現(xiàn)程序中的FOR循環(huán)語句代碼相同,在這里就不再寫出。部分程序代碼VOIDCBIYESHEJIVIEWPOINTTOCURVEINTX0,INTX1,INTX2,INTY0,INTY1,INTY2,INTXFIRST,INTYFIRST,CDCPDCLONGN,NLONGF0,F1,F2,F3,G0,G1,G2,G3LONGA1,A2,A3,B1,B2,B3LONGNX,NYNXX12X2X1X12X2X1NYY12Y2Y1X12Y2Y1/求得最佳的N值畢業(yè)論文參數(shù)曲線的快速生成算法34NNXNYNXNY/將N值減小1/2NN1NNNF0NX0F1X2NX1X0NNX0F24X22NX1NNX0F39X23NX1NNX0G0NY0G1Y2NY1Y0NNY0G24Y22NY1NNY0G39Y23NY1NNY0A1F1F0A2F22F1F0A3F33F23F1F0B1G1G0B2G22G1G0B3G33G23G1G0LONGXXFIRSTLONGYYFIRSTLONGZ10,Z20INTFX0,FY0PDCSETPIXELX,Y,RGB10,20,20該程序剩下的代碼在此省略現(xiàn)在回過頭來看看要完成的第一個要求通過在屏幕上用鼠標點擊若干點作為該曲線的控制點,然后點擊鼠標右鍵自動畫成曲線。因此當在屏幕上點了若干個點之后,實際上曲線SXU的控制點A0,B0,BI,BK,BK1即可確定下來了,隨之K的值也就可以確定(即控制點的數(shù)目減去3)。因為在程序中需要使用這些控制點的坐標值,最好的辦法就是在程序中定義一個數(shù)組來保存這些點的坐標值。而在VC中可以很方便的使用MFC中的數(shù)組摸板類CARRAY來創(chuàng)建一個CPOINT類型的數(shù)組,其語句為CARRAYARR1,創(chuàng)建了數(shù)組ARR1之后,就可以在用鼠標左鍵單擊畫點的同時并將該點的坐標值存入樹組ARR1中,以方便后邊計算使用。當各控制點的坐標值被存入樹組之后,就可以很方便地通過使用一個FOR循環(huán)語句完成表達式4111KIIIKX的計算,并能夠在程序中計算出曲線的二次項和一次項的系數(shù)以及常數(shù)項BK的值從而得到SXU的確定的表達式。為了方便編寫程序,SXU以如下形式展開SXU1KXA21KX03XKXK14111KIIIKXU21KXA41K畢業(yè)論文參數(shù)曲線的快速生成算法35X02XK4111KIIIKXUBK,I1,2,然后利用數(shù)組中存儲的A0,B0,BI,BK,BK1的值,編寫如下的代碼來計算SXU與SYU的U2和U的系數(shù)以及常數(shù)項BK的值,并將其作為曲二次曲線01220122YTYTYTGYXTXTXTFX的系數(shù)X2,X1,X0,Y2,Y1,Y0傳遞給上述的實現(xiàn)程序從而完成參數(shù)曲線SU的繪制。該段代碼為鼠標左擊畫點的函數(shù)VOIDCBIYESHEJIVIEWONLBUTTONDOWNUINTNFLAGS,CPOINTPOINTIFISHAVEPOINTFALSERETURN/在畫點的同時將該點的坐標存入數(shù)組ARR1中ARR1ADDPOINTCDCPDCGETDCPDCSETPIXELPOINTX,POINTY,RGB255,0,0CVIEWONLBUTTONDOWNNFLAGS,POINT該段代為鼠標右擊生成曲線的函數(shù)代碼。VOIDCBIYESHEJIVIEWONRBUTTONDOWNUINTNFLAGS,CPOINTPOINTINTPOINTCOUNT,I,K,N2,N1,N0,M1,M2,M0INTJ,P/得到控制點的數(shù)目POINTCOUNTARR1GETSIZE/計算K的值KPOINTCOUNT3/計算表達式4111KIIIKX的值FORI1,J0IK1IJJINTPOW1,KIARR1I1XFORI1,P0IK1IPPINTPOW1,KIARR1I1Y/分別計算SXU與SYU的二次項、一次項的系數(shù)以及常數(shù)項的值M2INTPOW1,KARR10X2INTPOW1,KARR11X3ARR1POINTCOUNT2XARR1POINTCOUNT1X4JM1INTPOW1,KARR10X4INTPOW1,KARR11X2ARR1POINTCOUNT2X4J畢業(yè)論文參數(shù)曲線的快速生成算法36M0ARR1POINTCOUNT2XN1INTPOW1,KARR10Y4INTPOW1,KARR11Y2ARR1POINTCOUNT2Y4PN2INTPOW1,KARR10Y2INTPOW1,KARR11X3ARR1POINTCOUNT2YARR1POINTCOUNT1Y4PN0ARR1POINTCOUNT2YCDCPDCGETDC/調(diào)用二次參數(shù)曲線的實現(xiàn)函數(shù)POINTTOCURVEM0,M1,M2,N0,N1,N2,ARR11X,ARR11Y,PDCCVIEWONRBUTTONDOWNNFLAGS,POINT程序運行后的效果如下42通過在對話框中輸入控制點的坐標畫曲線通過在對話框中輸入控制點的坐標畫曲線通過在對話框中輸入控制點的坐標畫曲線通過在對話框中輸入控制點的坐標畫曲線本小節(jié)的任務(wù)是通過在對話框中輸入5個控制點的坐標來畫出該曲線。由于已經(jīng)規(guī)定好曲線SU1K2UU2A01K4U2U2B0畢業(yè)論文參數(shù)曲線的快速生成算法374U4U2111KIIIKB12U3U2BKU2BK1,I1,2有五個控制點,所以得到曲線方程中K的值為2。因此可將該曲線進行展開得到如下形式的曲線方程SXU4X1X3XA2X03X2U22XA4X04X1X2UX2SYU4Y1Y3YA2Y03Y2U22YA4Y04Y1Y2UY2由于上述方程中的XA,X0,X1,X2,X3和YA,Y0,Y1,Y2,Y3的值由對話框中輸入,所以可以很容易計算出SXU與SYU中的U2、U的系數(shù)以及X2、Y2的值,并做為上一小節(jié)提到的曲線方程01220122YTYTYTGYXTXTXTFX的系數(shù)X2,X1,X0,Y2,Y1,Y0傳遞給其實現(xiàn)程序中即可。下圖是輸入控制點坐標的對話框點擊確定按鈕后的生成的參數(shù)曲線圖與上一小節(jié)最后所示的效果圖相似,在此就不在貼出。畢業(yè)論文參數(shù)曲線的快速生成算法38第五章第五章第五章第五章結(jié)論結(jié)論結(jié)論結(jié)論在前面所討論的雙步逐點曲線生成算法,圍繞了最佳步長的選擇進行討論,并重點論述了在使用雙步算法時,如何計算得到因N值減小一半后而可能被漏掉的像素點。該算法基本上達到了逐點、快速生成參數(shù)曲線的要求。在前面的章節(jié)中我們曾分別以三次BEZIER曲線,普通的三次參數(shù)曲線以及導(dǎo)師給我的那個特殊的二次參數(shù)曲線為例并且以通過在對話框中輸入不同的方程系數(shù)來實現(xiàn)不同的曲線方程為例,編程實踐了該雙步算法算法。程序運行時都能夠快速、較準確地完成曲線的繪制,表明該算法還是可行的。由于時間與本人的能力所限,本算法僅以二次和三次參數(shù)曲線為例進行討論實踐,沒有對更高次的參數(shù)曲線進行編程實踐,所以其效果也不能說一定很好,在以后的時間里我會把這一部分的算法實踐給補上以完善此算法,為此次畢業(yè)設(shè)計畫上一個完整的句號。畢業(yè)論文參數(shù)曲線的快速生成算法39第六章第六章第六章第六章個人小節(jié)個人小節(jié)個人小節(jié)個人小節(jié)在做畢業(yè)設(shè)計的兩個多月時間里,通過對參數(shù)曲線生成算法的研究使我學(xué)習(xí)到了有關(guān)計算機圖形學(xué)與圖象處理的一些知識,并對以前學(xué)習(xí)過的C語言進行了很好的復(fù)習(xí)與鞏固,使自己的編程能力有了進一步的提高,同時,對VISUALC60這個強大的開發(fā)工具進行了系統(tǒng)的學(xué)習(xí),使自己能夠較好的使用VC編寫一些功能簡單的應(yīng)用程序。通過做畢業(yè)設(shè)計,我想自己最大的收獲就是分析解決問題的能力提高了。在做畢業(yè)設(shè)計的過程中,曾遇到了許多不懂的問題,在通過查找資料、認真分析以及求助于導(dǎo)師和同學(xué)后都將問題一一化解,在這個過程中,自己的分析問題與解決問題的能力都在逐漸提高。這對我以后走向工作崗位都會有極大的幫助。同時,通過這次的畢業(yè)設(shè)計,我深深體會到了計算機科學(xué)的博大精深,從事計算機行業(yè)一定要具備刻苦與鉆研,思考與創(chuàng)新的素質(zhì),我自己也會更加努力爭取能在計算機領(lǐng)域中做出自己的成就。附本畢業(yè)設(shè)計的完成離不開老師的指導(dǎo)與同學(xué)的幫助,在此特別感謝林意林意林意林意導(dǎo)師以及其他曾幫助過我的同學(xué)。畢業(yè)論文參數(shù)曲線的快速生成算法40第七章第七章第七章第七章附錄附錄附錄附錄英文資料英文資料英文資料英文資料HOWTOGETCURRENTCDOCUMENTORCVIEWFROMANYWHERESUMMARYINAMICROSOFTFOUNDATIONCLASSESMFCWINDOWSBASEDAPPLICATION,ITISOFTENUSEFULTOBEABLETOGETAPOINTERTOTHECURRENTLYACTIVEDOCUMENTORVIEWFROMANYWHEREINTHEPROGRAMFOREXAMPLE,BEINGABLETOACCESSTHECURRENTDOCUMENTFROMADIALOGBOXISSOMETIMESUSEFULTHISARTICLEDISCUSSESTHESIMPLESTMETHODSFORDOINGSO,USINGTHERELATIONSHIPSBETWEENMFCOBJECTS,ANDBASICMFCARCHITECTURECVIEWTHISCLASSPROVIDESTHEBASICFUNCTIONALITYFORUSERDEFINEDVIEWCLASSESAVIEWISATTACHEDTOADOCUMENTANDACTSASANINTERMEDIARYBETWEENTHEDOCUMENTANDTHEUSERTHEVIEWRENDERSANIMAGEOFTHEDOCUMENTONTHESCREENORPRINTERANDINTERPRETSUSERINPUTASOPERATIONSUPONTHEDOCUMENTAVIEWISACHILDOFAFRAMEWINDOWMORETHANONEVIEWCANSHAREAFRAMEWINDOW,ASINTHECASEOFASPLITTERWINDOWTHERELATIONSHIPBETWEENAVIEWCLASS,AFRAMEWINDOWCLASS,ANDADOCUMENTCLASSISESTABLISHEDBYACDOCTEMPLATEOBJECTWHENTHEUSEROPENSANEWWINDOWORSPLITSANEXISTINGONE,THEFRAMEWORKCONSTRUCTSANEWVIEWANDATTACHESITTOTHEDOCUMENTAVIEWCANBEATTACHEDTOONLYONEDOCUMENT,BUTADOCUMENTCANHAVEMULTIPLEVIEWSATTACHEDTOITATONCEFOREXAMPLE,IFTHEDOCUMENTISDISPLAYEDINASPLITTERWINDOWORINMULTIPLECHILDWINDOWSINAMULTIPLEDOCUMENTINTERFACEMDIAPPLICATIONYOURAPPLICATIONCANSUPPORTDIFFERENTTYPESOFVIEWSFORAGIVENDOCUMENTTYPEFOREXAMPLE,AWORDPROCESSINGPROGRAMMIGHTPROVIDEBOTHACOMPLETETEXTVIEWOFADOCUMENTANDANOUTLINEVIEWTHATSHOWSONLYTHESECTIONHEADINGSTHESEDIFFERENTTYPESOFVIEWSCANBEPLACEDINSEPARATEFRAMEWINDOWSORINSEPARATEPANESOFASINGLEFRAMEWINDOWIFYOUUSEASPLITTERWINDOWTOUSECVIEW,DERIVEACLASSFROM
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年湖南醫(yī)藥學(xué)院馬克思主義基本原理概論期末考試題附答案解析(奪冠)
- 2024年蓮花縣幼兒園教師招教考試備考題庫附答案解析(必刷)
- 2025年新絳縣幼兒園教師招教考試備考題庫帶答案解析(必刷)
- 2026年廣東農(nóng)工商職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫帶答案解析
- 交通運輸統(tǒng)計分析與報告指南
- 2026年包頭鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試模擬測試卷附答案解析
- 2025年廣東以色列理工學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 2025年舞陽縣招教考試備考題庫帶答案解析
- 2024年黑龍江幼兒師范高等專科學(xué)校馬克思主義基本原理概論期末考試題及答案解析(奪冠)
- 2025年長春汽車職業(yè)技術(shù)大學(xué)馬克思主義基本原理概論期末考試模擬題含答案解析(必刷)
- 科技招商合同協(xié)議書范本
- 國家電網(wǎng)有限公司輸變電工程通 用設(shè)計(330~750kV輸電線路絕緣子金具串通 用設(shè)計分冊)2024版
- 欠債抵房屋協(xié)議合同
- TSG R0004-2025固定式壓力容器安全技術(shù)監(jiān)察規(guī)程
- 大學(xué)勞動教育(第二版)課件 第二章 勞動價值觀與勞動素養(yǎng)
- DBJ50T-240-2016 蒸壓加氣混凝土精確砌塊自承重墻體工程應(yīng)用技術(shù)規(guī)程
- 重難點08滑塊-滑板模型專題高一物理題組法突破重難點(原卷版)
- 2024鐵路營業(yè)線作業(yè)人員北斗安全預(yù)警防護系統(tǒng)技術(shù)條件
- 《東北解放區(qū)工業(yè)戲劇研究(1945-1949年)》
- 新版中國食物成分表
- 外研版七年級英語上冊電子版課文-七上外研版英語電子書
評論
0/150
提交評論