計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)指導(dǎo)書(shū)--xhp_第1頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)指導(dǎo)書(shū)--xhp_第2頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)指導(dǎo)書(shū)--xhp_第3頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)指導(dǎo)書(shū)--xhp_第4頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)指導(dǎo)書(shū)--xhp_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)指導(dǎo)書(shū)軟件學(xué)院軟件理論系2013年2月22日前 言隨著計(jì)算機(jī)科學(xué)與技術(shù)的迅猛發(fā)展,特別是大規(guī)模集成電路和超大規(guī)模集成電路技術(shù)的飛速發(fā)展,計(jì)算機(jī)已經(jīng)成為一種高速、費(fèi)用低的生成圖形的有效工具。計(jì)算機(jī)圖形學(xué)作為利用計(jì)算機(jī)生成圖形的技術(shù),已經(jīng)越來(lái)越廣泛地在各個(gè)領(lǐng)域得到應(yīng)用。隨著計(jì)算機(jī)圖形學(xué)應(yīng)用領(lǐng)域的拓寬和應(yīng)用水平的提高,人們?cè)絹?lái)越重視對(duì)該項(xiàng)技術(shù)的研究和利用。當(dāng)今,計(jì)算機(jī)圖形學(xué)已經(jīng)成為了計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域的一個(gè)重要研究方向,并被廣泛的應(yīng)用于科學(xué)計(jì)算、工程設(shè)計(jì)、醫(yī)藥、工業(yè)、藝術(shù)、娛樂(lè)業(yè)、廣告業(yè)、教育與培訓(xùn)、商業(yè)和政府部門(mén)等。鑒于計(jì)算機(jī)圖形學(xué)的重要性和應(yīng)用的廣泛性,計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)將其設(shè)

2、置為專(zhuān)業(yè)必選的選修課。它主要是研究用計(jì)算機(jī)及其圖形設(shè)備來(lái)輸入、表示、變換、運(yùn)算和輸出圖形的原理、算法及系統(tǒng)。通過(guò)對(duì)本課程的學(xué)習(xí),使學(xué)生對(duì)計(jì)算機(jī)圖形學(xué)有一個(gè)完整的了解,并為進(jìn)行計(jì)算機(jī)圖形學(xué)應(yīng)用和研究打下扎實(shí)基礎(chǔ)。為了讓學(xué)生深入理解各種圖形算法和相關(guān)理論知識(shí),貫徹學(xué)生學(xué)習(xí)知識(shí)是為了應(yīng)用知識(shí)、應(yīng)用就要追求創(chuàng)新應(yīng)用的思想和意識(shí),設(shè)計(jì)了8個(gè)實(shí)驗(yàn)。通過(guò)實(shí)驗(yàn),使學(xué)生更加深入的理解計(jì)算機(jī)圖形系統(tǒng)的工作機(jī)理和基本圖形生成和處理算法。實(shí)現(xiàn)語(yǔ)言為T(mén)urbo C 、Visual C+ 6.0、OpenGl,或其它學(xué)生掌握的高級(jí)語(yǔ)言。這些實(shí)驗(yàn)是對(duì)學(xué)生的一種多全面訓(xùn)練。它著眼于原理與應(yīng)用的結(jié)合,使學(xué)生學(xué)會(huì)如何把書(shū)上學(xué)到的

3、知識(shí)用于解決實(shí)際問(wèn)題,培養(yǎng)軟件工作所需要的動(dòng)手能力;另一方面,能使書(shū)上的知識(shí)變“活”,起到深化理解和靈活掌握教學(xué)內(nèi)容的目的。在實(shí)驗(yàn)過(guò)程中,能夠培養(yǎng)學(xué)生的自學(xué)能力、團(tuán)隊(duì)協(xié)作能力、解決問(wèn)題能力、軟件開(kāi)發(fā)能力等多種能力。目 錄實(shí)驗(yàn)要求及實(shí)驗(yàn)報(bào)告規(guī)范1實(shí)驗(yàn)一 交互式繪圖技術(shù)的實(shí)現(xiàn)2實(shí)驗(yàn)二 直線、圓弧及橢圓弧的生成算法5實(shí)驗(yàn)三 多邊形的區(qū)域填充7實(shí)驗(yàn)四 二維幾何變換9實(shí)驗(yàn)五 裁剪算法10實(shí)驗(yàn)六 三維圖形變換11實(shí)驗(yàn)七 曲線與曲面12實(shí)驗(yàn)八 真實(shí)感圖形繪制14參考文獻(xiàn)15附錄A C程序繪圖基礎(chǔ)16附錄B Visual C+圖形程序設(shè)計(jì)23一、實(shí)驗(yàn)?zāi)康?3二、實(shí)驗(yàn)任務(wù)(需要課外學(xué)時(shí)8學(xué)時(shí))23三、基礎(chǔ)知識(shí)和

4、實(shí)驗(yàn)步驟23(一) Visual C+ 6.0應(yīng)用程序開(kāi)發(fā)方法23(二) 圖形設(shè)備接口和圖形程序設(shè)計(jì)26(三)鼠標(biāo)編程36(四)菜單程序設(shè)計(jì)42四、實(shí)驗(yàn)總結(jié)46附錄C OpenGL圖形程序設(shè)計(jì)4752 - 實(shí)驗(yàn)要求及實(shí)驗(yàn)報(bào)告規(guī)范一、實(shí)驗(yàn)的性質(zhì)、目的和任務(wù)本實(shí)驗(yàn)是與本專(zhuān)業(yè)課計(jì)算機(jī)圖形學(xué)相配套的,通過(guò)計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)教學(xué),引導(dǎo)學(xué)生由淺入深地掌握計(jì)算機(jī)圖形學(xué)理論與相關(guān)算法,具有一定實(shí)踐體會(huì)和相關(guān)的編程能力及圖形處理的能力,為畢業(yè)設(shè)計(jì)和畢業(yè)后從事計(jì)算機(jī)繪圖、計(jì)算機(jī)輔助設(shè)計(jì)、輔助教學(xué)、輔助工程、圖形處理等打下基礎(chǔ)。本實(shí)驗(yàn)教學(xué)主要內(nèi)容是要求學(xué)生編程實(shí)現(xiàn)各種圖形的繪制,強(qiáng)化學(xué)生的程序設(shè)計(jì)能力和程序調(diào)試能力,

5、使學(xué)生鞏固所學(xué)各種圖形的生成算法的理論知識(shí)。二、實(shí)驗(yàn)基本要求實(shí)驗(yàn)基本要求:本實(shí)驗(yàn)教學(xué)的基本要求是: 實(shí)驗(yàn)課前,學(xué)生必須預(yù)習(xí)實(shí)驗(yàn)指導(dǎo)書(shū)中的實(shí)驗(yàn)內(nèi)容,了解本次實(shí)驗(yàn)的目的、要求、原理、算法、步驟等,準(zhǔn)備好實(shí)驗(yàn)的程序設(shè)計(jì)算法描述與關(guān)鍵分析內(nèi)容; 準(zhǔn)備好程序和測(cè)試數(shù)據(jù),上機(jī)調(diào)試、運(yùn)行; 完成每個(gè)實(shí)驗(yàn)后進(jìn)行結(jié)果對(duì)比分析,完成實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)內(nèi)容要求:(1) 認(rèn)真分析題目的條件和要求,復(fù)習(xí)相關(guān)理論知識(shí),選擇適當(dāng)?shù)慕鉀Q方案和算法;(2) 編寫(xiě)上機(jī)實(shí)驗(yàn)程序,作好上機(jī)前的準(zhǔn)備工作;(3) 上機(jī)調(diào)試程序,繪制圖形,驗(yàn)證算法的正確性;(4) 分析和解釋運(yùn)行結(jié)果;(5) 程序調(diào)試完后,須由實(shí)驗(yàn)輔導(dǎo)教師在機(jī)器上檢查運(yùn)行結(jié)果

6、;(6) 按照要求書(shū)寫(xiě)每次實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。 (7) 要求獨(dú)立完成上述各項(xiàng)。三、實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)使用的語(yǔ)言:C或Visual C+、OpenGL四、考核與報(bào)告(1) 本課程的評(píng)分方法是考查,實(shí)驗(yàn)作為平時(shí)成績(jī)占學(xué)期期末總成績(jī)的30%。(2) 每個(gè)實(shí)驗(yàn)完成后必須完成相應(yīng)的實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)成績(jī)組成為:實(shí)驗(yàn)報(bào)告占40;按照教學(xué)計(jì)劃的實(shí)驗(yàn),現(xiàn)場(chǎng)編程序,演示計(jì)算結(jié)果占50;創(chuàng)新占10。五、實(shí)驗(yàn)報(bào)告格式實(shí)驗(yàn)報(bào)告在書(shū)寫(xiě)過(guò)程中應(yīng)該將以下問(wèn)題寫(xiě)清楚1、 實(shí)驗(yàn)?zāi)康模?、 實(shí)驗(yàn)要求:3、 實(shí)驗(yàn)內(nèi)容:4、 實(shí)驗(yàn)題目: 5、 設(shè)計(jì)原理與思想: 6、 對(duì)應(yīng)程序:7、 實(shí)驗(yàn)結(jié)果(輸出圖形)及其分析: 8、 計(jì)算中出現(xiàn)

7、的問(wèn)題,解決方法及體會(huì):實(shí)驗(yàn)一 交互式繪圖技術(shù)的實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康?、掌握各種交互式繪圖技術(shù)及其原理;2、掌握Visual C+集成編程環(huán)境的使用,圖形設(shè)備接口和常用圖形程序設(shè)計(jì)、鼠標(biāo)編程、畫(huà)刷與畫(huà)筆以及菜單設(shè)計(jì)等,能夠利用Visual C+實(shí)現(xiàn)各種交互式繪圖技術(shù);3、了解OpenGL的基本操作及其庫(kù)函數(shù),能夠通過(guò)OpenGL庫(kù)函數(shù)實(shí)現(xiàn)各種交互式繪圖技術(shù)。二、實(shí)驗(yàn)要求1、用Visual C+設(shè)計(jì)一個(gè)簡(jiǎn)易的交互式繪圖軟件,能夠?qū)崿F(xiàn)鉛筆繪圖,以及直線、圓等基本圖形的繪制;2、能夠?qū)崿F(xiàn)橡皮筋畫(huà)線或圓、拾取、拖動(dòng)、撤銷(xiāo)和重做等交互式技術(shù);3、能夠用OpenGL函數(shù)庫(kù)實(shí)現(xiàn)橡皮筋技術(shù)和拾取操作。三、算法提示

8、(一)鉛筆繪圖的實(shí)現(xiàn):1、建一個(gè)MFC AppWizard(exe)工程(具體操作見(jiàn)附錄B),新增“繪圖”菜單,并在該菜單下添加子菜單“鉛筆”;2、向視圖類(lèi)中添加1個(gè)菜單消息響應(yīng)函數(shù)和3個(gè)鼠標(biāo)消息響應(yīng)函數(shù),并輸入時(shí)間處理程序代碼。(1)新增成員變量: public: int drawMode; /畫(huà)圖模式,1表示鉛筆 int isDrag; /鼠標(biāo)是否是拖動(dòng),1表示拖動(dòng),0表示移動(dòng) CPoint p0; /鉛筆的起點(diǎn)(2)初始化變量:CMy11View:CMy11View()/ TODO: add construction code here drawMode=0; isDrag=0;(3)在

9、消息響應(yīng)函數(shù)中添加代碼void CMy11View:OnPen()/“鉛筆”菜單響應(yīng)函數(shù)/ TODO: Add your command handler code here drawMode=1; /設(shè)置為鉛筆模式void CMy11View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default isDrag=1; /設(shè)置為拖動(dòng) p0=point; /記下起點(diǎn)CView:OnLButtonDown(nFlags, point);void CM

10、y11View:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default isDrag=0; /設(shè)置為移動(dòng)CView:OnLButtonUp(nFlags, point);void CMy11View:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if(isDrag & drawMode=1)

11、/如果是鼠標(biāo)拖動(dòng),且是鉛筆模式 CDC* pdc=GetDC(); pdc-MoveTo(p0); pdc-LineTo(point); p0=point; ReleaseDC(pdc); CView:OnMouseMove(nFlags, point);(4)編譯運(yùn)行程序,驗(yàn)證運(yùn)行結(jié)果。(二)橡皮筋畫(huà)直線的實(shí)現(xiàn)(1)并在“繪圖”菜單下再添加子菜單“直線”,添加“直線”菜單響應(yīng)函數(shù),并編寫(xiě)代碼void CMy11View:OnLine() /“直線”菜單響應(yīng)函數(shù)/ TODO: Add your command handler code heredrawMode=2; /設(shè)置為繪制直線模式(2)

12、新增成員變量CPoint p1;(3)修改OnLButtonDown以及OnMouseMove函數(shù)的代碼:void CMy11View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultisDrag=1;p0=point;p1=point;CView:OnLButtonDown(nFlags, point);void CMy11View:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add y

13、our message handler code here and/or call defaultif(isDrag) /鼠標(biāo)拖動(dòng)CDC* pdc=GetDC();switch (drawMode)case 1:pdc-MoveTo(p0); pdc-LineTo(point);p0=point;break; /鉛筆繪圖case 2: pdc-SetROP2(R2_NOTXORPEN); /采用異或模式繪圖 pdc-MoveTo(p0); pdc-LineTo(p1); /擦除原直線 pdc-MoveTo(p0); pdc-LineTo(point);p1=point;break; /橡皮筋畫(huà)

14、直線ReleaseDC(pdc);CView:OnMouseMove(nFlags, point);(4)編譯運(yùn)行程序,驗(yàn)證運(yùn)行結(jié)果。(三)OpenGL中橡皮筋技術(shù)與拾取操作的實(shí)現(xiàn),見(jiàn)教材62-70頁(yè)。四、實(shí)驗(yàn)結(jié)果、分析和總結(jié)1對(duì)程序進(jìn)行分析和比較,你還能提出哪些改進(jìn)和擴(kuò)充?例如:其他交互式繪圖技術(shù)的實(shí)現(xiàn)。2總結(jié)從本次實(shí)驗(yàn)中學(xué)到了那些知識(shí)點(diǎn)或者有哪些感受?實(shí)驗(yàn)二 直線、圓弧及橢圓弧的生成算法一、實(shí)驗(yàn)?zāi)康?、幾種直線生成算法的比較,特別掌握用Bresenham直線生成算法。2、幾種圓弧生成算法的比較,掌握Bresenham圓弧生成算法。3、幾種橢圓弧生成算法的比較,掌握Bresenham橢圓弧生

15、成算法。4、掌握線型與線寬處理技術(shù)。二、實(shí)驗(yàn)要求1、用不同的生成算法在屏幕上繪制出直線的圖形,對(duì)不同的算法可設(shè)置不同的線形或顏色表示區(qū)別。2、用Bresenham生成算法在屏幕上繪制出圓弧的圖形。3、用Bresenham生成算法在屏幕上繪制出橢圓弧的圖形。4、用動(dòng)畫(huà)的方式表演圖形的生成。三、算法提示1、有關(guān)直線生成算法有:DDA(數(shù)值微分)直線算法、逐點(diǎn)比較法、直線Bresenham生成算法。直線Bresenham生成算法思想如下(第一象限,且斜率k0,則yi+1=yi+1,否則 yi+1=yi;3) 畫(huà)點(diǎn)(xi+1,yi+1);4) 求下一個(gè)誤差Pi+1點(diǎn),如果Pi0,則Pi+1=Pi+2d

16、y-2dx,否則 Pi+1=Pi+2dy;5) i=i+1,如果i1的情況,可交換變量x和y,y每次長(zhǎng)1個(gè)單位。對(duì)Pi進(jìn)行判斷,xi+1=xi或xi+1=xi+1。2、有關(guān)圓弧生成算法有:逐點(diǎn)比較法、DDA(數(shù)值微分)直線算法、圓的Bresenham生成算法。圓的生成算法一般將圓劃分為8等份,只需計(jì)算(900,450)的八分之一圓弧,其它用對(duì)稱(chēng)法求得(參見(jiàn)圖2-1 b)。Bresenham生成算法思想如下(第一象限,且斜率k1的情況):1) 計(jì)算誤差初值P1=3-2r,i=1,畫(huà)點(diǎn)(0,r);2) 求下一個(gè)光柵點(diǎn)位置 xi+1=xi+1 如果Pi0,則yi+1=yi,否則 yi+1=yi-1;

17、3) 畫(huà)點(diǎn)(xi+1,yi+1);4) 求下一個(gè)誤差Pi+1點(diǎn),如果Pi0,則Pi+1=Pi+2xi+6,否則 Pi+1=Pi+4(xi-yi)+10;5) i=i+1,如果x=y則結(jié)束操作,否則轉(zhuǎn)步驟2。圓Bresenham算法的算式簡(jiǎn)單,只需做加減法和乘4運(yùn)算3對(duì)屏幕布局的考慮適當(dāng)選取坐標(biāo),將屏幕分成幾個(gè)區(qū)域性,在每個(gè)區(qū)域內(nèi)實(shí)現(xiàn)一種算法,生成一個(gè)圖形。也可用delay實(shí)現(xiàn)延時(shí)實(shí)現(xiàn)動(dòng)畫(huà)。四、實(shí)驗(yàn)結(jié)果、分析和總結(jié)1查看實(shí)驗(yàn)結(jié)果,驗(yàn)證算法的正確性;2對(duì)程序進(jìn)行分析和比較,你還能提出哪些改進(jìn)和擴(kuò)充?例如:(1)線刷子繪制直線和圓;(2)方形刷子繪制直線和圓;(3)虛線和點(diǎn)劃線的繪制;3總結(jié)從本次實(shí)

18、驗(yàn)中學(xué)到了那些知識(shí)點(diǎn)或者有哪些感受?實(shí)驗(yàn)三 多邊形的區(qū)域填充一、實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn),進(jìn)一步理解和掌握幾種常用多邊形填充算法的基本原理;2掌握多邊形區(qū)域填充算法的基本過(guò)程;3掌握在Visual C+環(huán)境下用多邊形填充算法編程實(shí)現(xiàn)指定多邊形的填充。二、實(shí)驗(yàn)要求1用種子填充算法實(shí)現(xiàn)區(qū)域填充。2掃描線填充算法實(shí)現(xiàn)區(qū)域填充。3用x-掃描線算法實(shí)現(xiàn)多邊形的填充(可選);4實(shí)現(xiàn)邊緣填充算法和邊標(biāo)志填充算法(可選);三、算法提示(一)多邊形的掃描轉(zhuǎn)換多邊形的掃描轉(zhuǎn)換:從多邊形的頂點(diǎn)信息出發(fā),求出位于其內(nèi)部的各個(gè)象素,并將其顏色值寫(xiě)入幀緩存中相應(yīng)單元的過(guò)程。多邊形的掃描轉(zhuǎn)換算法有:X掃描線算法、邊緣填充算法等。

19、1、X掃描線算法(1)基本思想:按掃描線順序,計(jì)算掃描線與多邊形的相交區(qū)間,再用要求的顏色顯示這些區(qū)間的所有象素。l (2)算法步驟:u 確定多邊形所占有的最大掃描線數(shù),得到多邊形頂點(diǎn)的最小和最大y值(ymin和ymax)。u 從y=ymin到y(tǒng)=ymax,每次用一條掃描線進(jìn)行填充。u 對(duì)一條掃描線填充的過(guò)程可分為四個(gè)步驟:求交;排序;交點(diǎn)配對(duì);區(qū)間填色。 2、邊緣填充算法基本思想:按任意順序處理多邊形的每條邊。處理時(shí),先求出該邊與掃描線的交點(diǎn),再對(duì)掃描線上交點(diǎn)右方的所有象素取反。(二)區(qū)域填充區(qū)域填充是指從區(qū)域內(nèi)的某一個(gè)象素點(diǎn)(種子點(diǎn))開(kāi)始,由內(nèi)向外將填充色擴(kuò)展到整個(gè)區(qū)域內(nèi)的過(guò)程。區(qū)域是指已

20、經(jīng)表示成點(diǎn)陣形式的填充圖形,它是相互連通的一組像素的集合。1、棧結(jié)構(gòu)實(shí)現(xiàn)4-連通邊界填充算法的算法步驟為: 種子象素入棧;當(dāng)棧非空時(shí)重復(fù)執(zhí)行如下三步操作: (a)棧頂象素出棧; (b)將出棧象素置成填充色; (c)檢查出棧象素的4-鄰接點(diǎn),若其中某個(gè)象素點(diǎn)不是邊界色且未置成多邊形色,則把該象素入棧。 2、棧結(jié)構(gòu)實(shí)現(xiàn)8-連通邊界填充算法的算法步驟為:種子象素入棧;當(dāng)棧非空時(shí)重復(fù)執(zhí)行如下三步操作:(a) 棧頂象素出棧;(b) 將出棧象素置成填充色;(c) 檢查出棧象素的8-鄰接點(diǎn),若其中某個(gè)像素點(diǎn)不是邊界色且未置成多邊形色,則把該像素入棧。四、實(shí)驗(yàn)結(jié)果、分析和總結(jié)1查看實(shí)驗(yàn)結(jié)果,驗(yàn)證算法的正確性;

21、2對(duì)程序進(jìn)行分析和比較,編寫(xiě)種子填充算法、多邊形填充算法和圖案填充算法? 3總結(jié)從本次實(shí)驗(yàn)中學(xué)到了那些知識(shí)點(diǎn)或者有哪些感受?實(shí)驗(yàn)四 二維幾何變換一、實(shí)驗(yàn)?zāi)康倪M(jìn)一步加深對(duì)常用的二維幾何變換的理解,如平移、旋轉(zhuǎn)、放大縮小等。掌握變換順序和變換矩陣。二、實(shí)驗(yàn)要求1 通過(guò)二維幾何變換的數(shù)學(xué)模型,編寫(xiě)平移、旋轉(zhuǎn)、放縮、對(duì)稱(chēng)變換;2 繪制一個(gè)北極星圖案或字母圖案,如下圖所示,實(shí)現(xiàn)該圖形的平移、旋轉(zhuǎn)、放縮、對(duì)稱(chēng)等幾何變換; 3 加入鼠標(biāo)功能,實(shí)現(xiàn)圖形的拾取及交互式移動(dòng)等功能。三、算法提示二維幾何圖形的步驟: 1、選取二維空間坐標(biāo)系。2、在選定的坐標(biāo)系中,確定圖形走筆順序或連點(diǎn)順序(拓?fù)浣Y(jié)構(gòu)) ,寫(xiě)出圖形中上

22、各頂點(diǎn)位置坐標(biāo),同時(shí)引入齊次坐標(biāo)表示成n(點(diǎn)數(shù))*3階矩陣。3、根據(jù)圖形的拓?fù)浣Y(jié)構(gòu)及頂點(diǎn)坐標(biāo),繪制圖形。4、將圖形的頂點(diǎn)坐標(biāo)矩陣乘以變換矩陣(不同的變換乘以不同的變換矩陣),得到變換后的頂點(diǎn)坐標(biāo),再根據(jù)圖形的拓?fù)浣Y(jié)構(gòu)及頂點(diǎn)坐標(biāo),繪制變換之后的圖形。四、實(shí)驗(yàn)分析和總結(jié)1 分析程序運(yùn)行結(jié)果,進(jìn)一步完善程序;2 參照Autocad的交互式方式,實(shí)現(xiàn)交互式放縮、旋轉(zhuǎn)和對(duì)稱(chēng)變換。3 寫(xiě)出實(shí)驗(yàn)體會(huì)和小結(jié),總結(jié)通過(guò)本次實(shí)驗(yàn),學(xué)習(xí)和掌握了哪些知識(shí)點(diǎn)?實(shí)驗(yàn)五 裁剪算法一、實(shí)驗(yàn)?zāi)康?、熟悉各種直線裁剪算法,包括CohenSutherland線段裁剪算法,中點(diǎn)分割線段裁剪算法,Liang-Barsky裁剪算法等,掌

23、握編碼裁剪法的編程方法和步驟。2、掌握多邊形逐邊裁剪(Sutherland-Hodgman)法的編程方法和步驟。3、了解字符裁剪算法的原理與編程方法。二、實(shí)驗(yàn)要求1、 實(shí)現(xiàn)直線的裁剪。在屏幕上繪制出一個(gè)矩形作為裁剪邊界,再用不同的顏色繪出幾個(gè)由線段組成的簡(jiǎn)單幾何圖形,它們和裁剪邊界可相交或不相交。按一個(gè)鍵,實(shí)現(xiàn)一條線段的裁剪,裁剪后的線段可用另一種顏色繪制,繼續(xù)按鍵,直至全部線段裁剪完。2、實(shí)現(xiàn)多邊形逐邊裁剪算法。三、算法提示1、Sutherland-Cohen(編碼) 裁剪算法用數(shù)組保存裁剪邊界的坐標(biāo)值和被裁剪邊界的坐標(biāo)值;根據(jù)逐邊裁剪方法對(duì)被裁剪邊界進(jìn)裁剪,計(jì)算出裁剪后的坐標(biāo);再將裁剪后的

24、直線用不同顏色繪制到屏幕上。Sutherland-Cohen(編碼)算法的思想是:對(duì)于每條線段P1P2分為三種情況處理。(1)若P1P2完全在窗口內(nèi),則顯示該線段P1P2簡(jiǎn)稱(chēng)“取”之。(2)若P1P2明顯在窗口外,則丟棄該線段,簡(jiǎn)稱(chēng)“棄”之。(3)若線段既不滿(mǎn)足“取”的條件,也不滿(mǎn)足“棄”的條件,則在交點(diǎn)處把線段分為兩段。其中一段完全在窗口外,可棄之。然后對(duì)另一段重復(fù)上述處理。2、Sutherland-Hodgman 多邊形裁剪算法多邊形裁剪算法的關(guān)鍵在于,通過(guò)裁剪,不僅要保留窗口內(nèi)多邊形的邊界部分,而且要將窗框有關(guān)部分按一定的次序插入多邊形保留邊界之間,從而使多邊形的邊仍然保持封閉狀態(tài)。Su

25、therland-Hodgman 多邊形裁剪算法:令多邊形的頂點(diǎn)按邊線逆時(shí)針走向排序P1、P2、Pn,多邊形各邊先與上窗框求交。求交后刪去多邊形一窗框之上的部分,并插入窗邊及延長(zhǎng)線與多邊形的交點(diǎn)之間的部分,從而形成一個(gè)新多邊形。然后,新的多邊形按相同的方法與右窗框相剪裁。如此重重,直至多邊形與各窗框都裁剪完畢。四、實(shí)驗(yàn)分析和總結(jié)1、分析程序運(yùn)行結(jié)果,進(jìn)一步完善程序;2、對(duì)程序進(jìn)行分析和比較,你還能提出哪些改進(jìn)和擴(kuò)充?例如:字符、圓等其他圖元的裁剪。3、寫(xiě)出實(shí)驗(yàn)體會(huì)和小結(jié),總結(jié)通過(guò)本次實(shí)驗(yàn),學(xué)習(xí)和掌握了哪些知識(shí)點(diǎn)?實(shí)驗(yàn)六 三維圖形變換一、實(shí)驗(yàn)?zāi)康?、復(fù)習(xí)用二維平面來(lái)表示三維立體圖形的正等測(cè)投影或

26、斜二側(cè)投影圖形。2、編程實(shí)現(xiàn)三維簡(jiǎn)單立體的平移變換、旋轉(zhuǎn)變換、對(duì)稱(chēng)變換、變比變換、錯(cuò)切變換。3、對(duì)變換后的簡(jiǎn)單三維幾何體用正等測(cè)投影或斜二側(cè)投影圖形來(lái)表示。4、用編寫(xiě)的繪制三維幾何圖形的函數(shù)。二、基本要求1、在屏幕上繪制出如下圖所示或其他簡(jiǎn)單幾何體的正等測(cè)投影的幾何圖形。 2、對(duì)上述簡(jiǎn)單三維幾何體進(jìn)行三維平移變換、旋轉(zhuǎn)、縮放、對(duì)稱(chēng)等幾何變換,用不同的顏色在屏幕上繪制出變換后的三維圖形正等測(cè)投影圖。三、算法提示1、三維圖形的變換實(shí)際上是一個(gè)變換矩陣,平面圖形是由若干個(gè)三維點(diǎn)P(xi,yi,zi)組成,經(jīng)過(guò)變換后的三維點(diǎn)P(xi,yi ,zi),其變換公式為: x y z 1 =x y z 1T對(duì)

27、于不同的變換,都是用矩陣乘法來(lái)計(jì)算坐標(biāo),只需改變變換矩陣即可。因此對(duì)每一種坐標(biāo)變換可編成一個(gè)子程序。2、 變換后的三維點(diǎn)并不能直接在二維屏幕上繪制出來(lái),必須用到前一個(gè)實(shí)驗(yàn)的內(nèi)容,選用一個(gè)軸測(cè)投影,將三維點(diǎn)經(jīng)過(guò)軸測(cè)投影變換后,得出P*(x*i,y*i ,z*i)x* y* z* 1 =x y z 1T正等測(cè)3、編程時(shí)的技巧用數(shù)組將三維圖形的特征坐標(biāo)點(diǎn)(頂點(diǎn))保存,由特征坐標(biāo)點(diǎn)(頂點(diǎn))繪制出三維圖形的命令(一般由直線命令組成)編寫(xiě)一個(gè)繪圖子程序,調(diào)用繪圖子程序繪制出變換以前的圖形(必須經(jīng)過(guò)軸測(cè)投影變換),根據(jù)不同的三維幾何變換,選用相應(yīng)三維坐標(biāo)變換公式(調(diào)用相應(yīng)的子程序)得出變換后的坐標(biāo);再經(jīng)軸測(cè)

28、投影變換后,得出P*(x*i,y*i ,z*i),調(diào)用繪圖子程序繪制出變換后的圖形。四、實(shí)驗(yàn)分析和總結(jié)1、分析程序運(yùn)行結(jié)果,進(jìn)一步完善程序。2、對(duì)程序進(jìn)行分析和比較,你還能提出哪些改進(jìn)和擴(kuò)充?例如:繪制三維立體圖形的斜二側(cè)投影圖形、透視投影等。3、寫(xiě)出實(shí)驗(yàn)體會(huì)和小結(jié),總結(jié)通過(guò)本次實(shí)驗(yàn),學(xué)習(xí)和掌握了哪些知識(shí)點(diǎn)?實(shí)驗(yàn)七 曲線與曲面一、實(shí)驗(yàn)?zāi)康母鶕?jù)曲線和曲面的基礎(chǔ)知識(shí)和常用曲線的數(shù)學(xué)基礎(chǔ),對(duì)其算法進(jìn)行程序設(shè)計(jì),驗(yàn)證算法的正確性,并通過(guò)程序結(jié)果加深對(duì)常用曲線數(shù)學(xué)模型的理解。二、實(shí)驗(yàn)要求 1、三次Bezier曲線與三次B樣條曲線的編程實(shí)現(xiàn)。在主窗口中添加Bezier曲線和B樣條曲線的菜單,當(dāng)運(yùn)行系統(tǒng),點(diǎn)

29、擊相應(yīng)菜單時(shí),根據(jù)系統(tǒng)給定的四個(gè)點(diǎn),在屏幕上繪制三次Bezier曲線或三次B樣條曲線。2、交互式繪制三次Bezier曲線或三次B樣條曲線的編程實(shí)現(xiàn)。添加鼠標(biāo)功能,進(jìn)行交互式繪制三次Bezier曲線或三次B樣條曲線。當(dāng)用鼠標(biāo)選擇四個(gè)點(diǎn)時(shí),繪出第一條Bezier曲線或B樣條曲線,以后每增加一個(gè)點(diǎn),就會(huì)增加一段曲線。Esc鍵表示鼠標(biāo)選擇點(diǎn)結(jié)束。 3、Bezier曲面與B樣條曲面的編程實(shí)現(xiàn)。在屏幕上繪制出一個(gè)Bezier曲面或B樣條曲面,并用不同的顏色標(biāo)出邊界網(wǎng)格。三、算法提示(一)Bezier曲線給定空間n+1個(gè)點(diǎn)的位置矢量Pi(i=0,1,2,n),則Bezier參數(shù)曲線上各點(diǎn)坐標(biāo)的插值公式是:

30、其中,Pi構(gòu)成該Bezier曲線的特征多邊形,Bi,n(t)是n次Bernstein基函數(shù):(二)B樣條曲線 以Bernstein基函數(shù)構(gòu)造的Bezier曲線或曲面有許多優(yōu)越性,但有兩點(diǎn)不足:其一是Bezier曲線或曲面不能作局部修改;其二是Bezier曲線或曲面的拼接比較復(fù)雜。1972年,Gordon、Riesenfeld等人提出了B樣條方法,在保留Bezier方法全部?jī)?yōu)點(diǎn)的同時(shí),克服了Bezier方法的弱點(diǎn)。B樣條曲線的方程定義為:是B樣條基函數(shù),其定義如下:(三)Bezier曲面1、設(shè)Pi j(i=0,1,2,n,j=0,1,m)為(n+1)(m+1)個(gè)空間點(diǎn)列,則mn次Bezier曲面

31、的方程為:其中,Bim(u)=Cmiui(1-u)m-i,Bjn(u)=Cnjvj(1-v)n-j,是Bernstern基函數(shù)。依次用線段連接Pi j(i=0,1,2,n,j=0,1,m)中相鄰兩點(diǎn)所形成的的空間網(wǎng)格,稱(chēng)為特征網(wǎng)格。當(dāng)n=m=3時(shí)為雙三次Bezier曲面,其方程為: 用矩陣表示為:S(u,v)=UMPMTVT其中 U=u3,u2,u1,u,V= v3,v2,v1,v 2、程序設(shè)計(jì)根據(jù)用Bezier曲面的定義,輸入Bezier曲面的特征多邊形(例如雙三次Bezier曲面輸入16個(gè)型值點(diǎn)),用數(shù)組將坐標(biāo)點(diǎn)保存;然后把u從現(xiàn)01分成m等分,把v從現(xiàn)01分成n等分,按上述公式算出Bez

32、ier曲面上的點(diǎn),在u方向畫(huà)出m+1條曲線,在v方向畫(huà)出n+1條曲線,就得到Bezier曲面。四、實(shí)驗(yàn)分析和總結(jié)1、分析程序運(yùn)行結(jié)果,進(jìn)一步完善程序; 2、對(duì)程序進(jìn)行分析和比較,你還能提出哪些改進(jìn)和擴(kuò)充?3、寫(xiě)出實(shí)驗(yàn)體會(huì)和小結(jié),總結(jié)通過(guò)本次實(shí)驗(yàn),學(xué)習(xí)和掌握了哪些知識(shí)點(diǎn)?實(shí)驗(yàn)八 真實(shí)感圖形繪制一、實(shí)驗(yàn)?zāi)康?、了解各種消隱算法的思想及實(shí)現(xiàn)方法,理解OpenGL中消隱處理的原理,掌握OpenGL中消隱處理技術(shù);2、了解計(jì)算機(jī)完成三維場(chǎng)景的真實(shí)感圖形繪制的原理及步驟,理解Phong光照明模型, 增量式光照明模型,透明算法,紋理算法,光線跟蹤算法。掌握OpenGL中光照與表面繪制函數(shù)及其操作。二、實(shí)驗(yàn)要

33、求 1、利用OpenGL函數(shù)實(shí)現(xiàn)三維物體的消隱處理; 2、利用OpenGL中提供的光照、表面材質(zhì)處理、透明處理、表面繪制等函數(shù),實(shí)現(xiàn)真實(shí)感圖形的繪制。三、算法提示OpenGL的工作順序就是一個(gè)從定義幾何要素到把象素段寫(xiě)入幀緩沖區(qū)的過(guò)程。在屏幕上顯示圖象的主要步驟是以下3步:(1)構(gòu)造幾何要素(點(diǎn),線,多邊形,圖象,位圖),創(chuàng)建對(duì)象的數(shù)學(xué)描述。在三維空間上放置對(duì)象,選擇有利的場(chǎng)景觀察點(diǎn)。(2)計(jì)算對(duì)象的顏色,這些顏色可能直接定義,或由光照條件及紋理間接給出。(3)光柵化,把對(duì)象的數(shù)學(xué)描述和顏色信息轉(zhuǎn)換到屏幕的象素。實(shí)現(xiàn)實(shí)例可以參照教材中的案例。四、實(shí)驗(yàn)分析和總結(jié)1、分析程序運(yùn)行結(jié)果,進(jìn)一步完善程

34、序; 2、對(duì)程序進(jìn)行分析和比較,你還能提出哪些改進(jìn)和擴(kuò)充?3、寫(xiě)出實(shí)驗(yàn)體會(huì)和小結(jié),總結(jié)通過(guò)本次實(shí)驗(yàn),學(xué)習(xí)和掌握了哪些知識(shí)點(diǎn)? 參考文獻(xiàn)1、陸楓、何云峰, 計(jì)算機(jī)圖形學(xué)基礎(chǔ)(第二版), 電子工業(yè)出版社 2011-11 2、Edward Angel、Dave Shreiner,交互式計(jì)算機(jī)圖形學(xué):基于OpenGL著色器的自頂向下方法(第六版),電子工業(yè)出版社, 2012-053、孫家廣、胡事民,計(jì)算機(jī)圖形學(xué)基礎(chǔ), 清華大學(xué)出版社,2011-07 4、潘云鶴等, 計(jì)算機(jī)圖形學(xué)原理、方法及應(yīng)用(第3版) , 高等教育出版社,2011-65、孫家廣,計(jì)算機(jī)圖形學(xué)(第三版),清華大學(xué)出版社,1999。6、

35、Donald Hearn,M.Pauline Baker著, 蔡士杰等譯,計(jì)算機(jī)圖形學(xué)(第三版),電子工業(yè)出版社,2005。7、Dave Shreiner等著,鄧鄭祥譯,OpenGL編程指南(第四版),人民郵電出版社,2005。附錄A C程序繪圖基礎(chǔ)一、實(shí)驗(yàn)?zāi)康?、 掌握用Turbo C繪圖時(shí)的步驟。2、 掌握C語(yǔ)言中的基本繪圖函數(shù)及其用法。3、 掌握簡(jiǎn)單動(dòng)畫(huà)的實(shí)現(xiàn)方法。二、用C語(yǔ)言繪制圖形的步驟1、為了調(diào)用C語(yǔ)言提供的圖形庫(kù)函數(shù),在程序的開(kāi)頭寫(xiě)上文件的包含命令;# include 2、圖形系統(tǒng)初始化及關(guān)閉圖形方式初始化是通過(guò)調(diào)用 initgraph( )函數(shù)來(lái)完成 ,它的調(diào)用格式為:init

36、graph (* gdriver,* gmode,* path);該函數(shù)的功能是通過(guò)從磁盤(pán)上裝入一個(gè)圖形驅(qū)動(dòng)程序來(lái)初始化圖形系統(tǒng),并將顯示器設(shè)置到指定圖形方式下。參數(shù)gdriver, gmode, path的含義參見(jiàn)教材的有關(guān)章節(jié)。在運(yùn)行圖形程序結(jié)束后,又要回到文本方式,以進(jìn)行其它工作,這時(shí)應(yīng)關(guān)閉圖形方式。其格式為:closegraph()。3、圖形顯示器的工作方式1) 文本模式與字符坐標(biāo)系在未通過(guò)圖形初始化之前的屏幕上,只能顯示字符的方式稱(chēng)為文本模式。C語(yǔ)言能在指定位置顯示字符,該坐標(biāo)系以屏幕的左上角為坐標(biāo)原點(diǎn),水平向?yàn)閤軸,自左向右;垂直方向?yàn)閥軸,自上向下,坐標(biāo)原點(diǎn)為(1,1)。能顯示的

37、行數(shù)、列數(shù)及顏色與顯示方式有關(guān)。Turbo C支持6種不同的文本顯示方式。2) 圖形模式與點(diǎn)坐標(biāo)系在屏幕上能顯示圖形的方式稱(chēng)為圖形方式。屏幕是由像素點(diǎn)組成的,通過(guò)initgraph函數(shù)的gmode參數(shù)來(lái)指定屏幕的分辨率,分辨率決定了像素點(diǎn)的多少。在圖形方式下,屏幕上每個(gè)像素的顯示位置用點(diǎn)坐標(biāo)系來(lái)描述。在該坐標(biāo)系中,屏幕的左上角為坐標(biāo)原點(diǎn)O(0,0),水平向?yàn)閤軸,自左向右;垂直方向?yàn)閥軸,自上向下。如圖A-1所示。O(0,0)maxxmaxy圖A-1 屏幕坐標(biāo)系分辨率不同,水平方向和垂直方向上的點(diǎn)數(shù)也不一樣,即其maxx、maxy的數(shù)值不同。在Turbo C中,坐標(biāo)數(shù)據(jù)有兩種形式給出:一種是絕

38、對(duì)坐標(biāo);另一種是相對(duì)坐標(biāo)。絕對(duì)坐標(biāo)的參考點(diǎn)是坐標(biāo)的原點(diǎn)O(0,0),x 和y的值只能取規(guī)定范圍內(nèi)的正整數(shù),其坐標(biāo)值在整個(gè)屏幕范圍內(nèi)確定。相對(duì)坐標(biāo)是相對(duì)于“當(dāng)前點(diǎn)”的坐標(biāo),所以其參考點(diǎn)不是坐標(biāo)系的原點(diǎn),而是當(dāng)前點(diǎn)。要相對(duì)坐標(biāo)中,x和y的取值是相對(duì)于當(dāng)前點(diǎn)在X方向和Y方向上的增量,這個(gè)增量可以是正的,也可以是負(fù)的,所以x和y的值可以是正整數(shù),也可以是負(fù)整數(shù)。此外,把在一個(gè)窗口范圍內(nèi)確定的坐標(biāo)也稱(chēng)為相對(duì)坐標(biāo)。三、C語(yǔ)言中的基本繪圖函數(shù)及其用法1、繪圖函數(shù)在用繪圖函數(shù)作圖時(shí),有的繪圖函數(shù)坐標(biāo)是相對(duì)于坐標(biāo)原點(diǎn),用絕對(duì)坐標(biāo)。有的繪圖函數(shù)用相對(duì)坐標(biāo),這時(shí)要隨時(shí)注意圖形的“當(dāng)前點(diǎn)位置”,它是繪圖的起始位置。也

39、就是說(shuō),圖形總是從當(dāng)前點(diǎn)開(kāi)始畫(huà)圖。畫(huà)完一個(gè)圖形后,有的當(dāng)前點(diǎn)不變,仍在原來(lái)的位置;而有時(shí)會(huì)移到新的位置。1) 直線類(lèi)繪圖函數(shù)用直線類(lèi)函數(shù)繪制直線圖形,可以用兩種坐標(biāo):一種是絕對(duì)坐標(biāo);另一種是相對(duì)坐標(biāo)。幾個(gè)常用的函數(shù): 點(diǎn)的絕對(duì)定位函數(shù) moveto(x,y) 點(diǎn)的相對(duì)定位函數(shù) moverel(deltayx,deltay)它們不繪制圖形,只改變當(dāng)前點(diǎn)的位置,接著用繪圖函數(shù)繪圖。 指定兩個(gè)絕對(duì)點(diǎn)繪直線函數(shù): line(x1,y1,x2,y2) 該函數(shù)不改變當(dāng)前點(diǎn)的位置。 從當(dāng)前點(diǎn)到指定的絕對(duì)點(diǎn)繪直線函數(shù): lineto(x,y) 該函數(shù)畫(huà)線的同時(shí),將當(dāng)前點(diǎn)的位置移到(x,y)。 從當(dāng)前點(diǎn)到指定的

40、相對(duì)點(diǎn)繪直線函數(shù): linerel(dx,dy) 該函數(shù)畫(huà)線的同時(shí),將當(dāng)前點(diǎn)的位置移到(x+dx,y+dy)。設(shè)當(dāng)前坐標(biāo)為(x,y)則linerel(dx,dy)與lineto(x+dx,y+dy)等價(jià)。 讀取當(dāng)前點(diǎn)的位置x,y函數(shù)分別為: getx(void),gety(void) 讀取x,y軸的最大值函數(shù)分別為:getmaxx(void),getmaxy(void)2) 多邊形類(lèi)繪圖函數(shù) 畫(huà)矩形函數(shù) rectangle(x1,y1,x2,y2); 畫(huà)多邊形函數(shù):drawpoly(n ,* polypoints)其中參數(shù),n為多邊形數(shù);* polypoints 指向一個(gè)整形數(shù)組,共有2n 個(gè)

41、整數(shù)組成,每對(duì)整數(shù)給出了一個(gè)多邊形頂點(diǎn)(x,y)坐標(biāo)。 2、圖形屬性的設(shè)置圖形屬性的設(shè)置包括繪制該圖形所用的顏色和線型。顏色又分為背景色和前景色:背景色指的是屏幕的顏色,即繪圖時(shí)的底色;前景是指繪圖時(shí)圖形線條所用的顏色。背景色和前景色的設(shè)置,只對(duì)設(shè)置后所繪制的顏色和線型有作用,對(duì)已經(jīng)繪制的圖形無(wú)作用。1) 設(shè)置前景色設(shè)置前景顏色所用的函數(shù) setcolor。其調(diào)用格式為:setcolor(color);其中color為一個(gè)整型數(shù)值,代表所取的顏色。2) 設(shè)置背景色設(shè)置背景顏色所用的函數(shù) sebktcolor。其調(diào)用格式為:setbkcolor(color);其中color為一個(gè)整型數(shù)值,代表所

42、取的顏色。3)設(shè)置線型設(shè)置當(dāng)前繪圖所用的線型和線寬,用函數(shù) setlinestyle。線型和線寬的設(shè)置僅限于對(duì)直線類(lèi)圖形有效。其調(diào)用格式為:setlinestyle(sty,pat,b);sty:整型值,用來(lái)定義所畫(huà)直線的類(lèi)型;pat用戶(hù)定義線型使用; b整型值,用來(lái)定義定義所畫(huà)直線的線寬。在屏幕上繪制出各種簡(jiǎn)單的幾何圖形,要求設(shè)置不同的線形和顏色。3、 填充填空是指用指定的模式和顏色來(lái)填空一個(gè)指定的封閉區(qū)域。1) 設(shè)置當(dāng)前的填充模式和顏色設(shè)置填充模式和顏色,用函數(shù)setfillstyle,其調(diào)用格式為:setfillstyle(pattern,color);2) 實(shí)施填充對(duì)于指定的一塊有界的

43、封閉區(qū)域進(jìn)行填充操作,用函數(shù)floodfill,其調(diào)用格式為:floodfill(x,y,bcolor);參數(shù)(x,y)指位于填充區(qū)域內(nèi)任意一點(diǎn)的坐標(biāo),該點(diǎn)作為填充的起始點(diǎn),參數(shù)bcolor作為填充區(qū)域的邊界顏色。如果起始點(diǎn)在封閉區(qū)域內(nèi),則區(qū)域內(nèi)部被填充;如果起始點(diǎn)在封閉區(qū)域外,則區(qū)域外部被填充。同學(xué)們可以自行驗(yàn)證。3) 其它填充函數(shù)以下幾個(gè)填充函數(shù),均須事先由setfillstyle 函數(shù)指定當(dāng)前的填充模式和顏色。 繪制并填充實(shí)橢圓函數(shù): fillellipse(x,y,rx,ry); 繪制并填充實(shí)橢圓扇區(qū)函數(shù): sector(x,y,angs,ange,rx,ry) 繪制并填充多邊形函數(shù):

44、fillpoly(nps ,*pxy)4、 屏幕管理Turbo C2.0 提供了11個(gè)函數(shù),用于對(duì)屏幕和視區(qū)進(jìn)行管理。1)設(shè)置視圖區(qū)在圖形方式下,可用函數(shù)setviewport在屏幕上定義一個(gè)視圖區(qū)。視圖區(qū)相當(dāng)于一個(gè)用于繪圖的窗口。視圖區(qū)的位置和大小用屏幕的絕對(duì)坐標(biāo)定義,并且可把視圖區(qū)設(shè)置為裁剪和不裁剪兩種狀態(tài)。函數(shù)setviewport的調(diào)用格式為:setviewport(x1,y1,x2,y2,c);參數(shù)x1,y1:為視圖區(qū)矩形的左上角頂點(diǎn)坐標(biāo);x2,y2:為視圖區(qū)矩形的右下角頂點(diǎn)坐標(biāo)。c為裁剪狀態(tài)參數(shù)。c=1,超出視圖區(qū)的圖形部分被自動(dòng)裁剪掉;c=0時(shí),對(duì)超出部分不作裁剪處理。應(yīng)注意:視

45、圖區(qū)建立以后,所有的圖形輸出坐標(biāo)都是相對(duì)于當(dāng)前視圖區(qū)的,即視圖區(qū)左上角點(diǎn)為坐標(biāo)(0,0)點(diǎn),而與視圖區(qū)和圖形在屏幕上的位置無(wú)關(guān)。在默認(rèn)情況下,整個(gè)屏幕為一個(gè)視圖區(qū)。2)清除視圖區(qū)清除視圖區(qū)用函數(shù) clearviewport。它的作用是清除掉當(dāng)前視圖區(qū),將當(dāng)前點(diǎn)的位置設(shè)置于屏幕左上角(0,0)點(diǎn)。調(diào)用格式為:clearviewport();3)清屏清屏的函數(shù)為 cleardevice ();四、簡(jiǎn)單動(dòng)畫(huà)制作1、最簡(jiǎn)單的動(dòng)畫(huà)的制作最簡(jiǎn)單的動(dòng)畫(huà)實(shí)現(xiàn)方法:先在屏幕上繪制一組圖形,用delay() 函數(shù)進(jìn)行一定延時(shí),再繪制另一組圖形。本方法實(shí)現(xiàn)的動(dòng)畫(huà)有閃耀感,不連續(xù)。五、上機(jī)作業(yè)題1、編寫(xiě)一個(gè)正方珙程序

46、(每一個(gè)比前一個(gè)稍小),并在其中用不同顏色畫(huà)15個(gè)正方形。2、編寫(xiě)一輛自行車(chē)一公路上由右至左快速行駛的程序。自行圖案可自行設(shè)計(jì)。六、實(shí)例程序:以下實(shí)例程序在Turbo C下調(diào)試通過(guò)1、演示各種顏色的填充情況的參考源程序# include graphics.hvoid main(void) int gdriver=DETECT,gmode,errorcode; int i,c,x=5,y=6; printf(input color number:n); scanf(%d,&c); initgraph(&gdriver,&gmode,E:TC ); cleardevice(); setbkcolo

47、r(14); setcolor(9); for(i=c;ic+8;i+) setcolor(i); rectangle(x,y,x+140,y+104); x=x+70;y=y+52; setfillstyle(1,i); floodfill(x,y,i); getch(); closegraph();2、飄帶圖案的參考源程序 水平直線的起點(diǎn)和終點(diǎn)坐標(biāo)均按余弦和正弦函數(shù)的規(guī)律變化,使形成具有不同長(zhǎng)度和不同位置的線段組成的圖案,該圖案看起來(lái)好像是隨風(fēng)飄揚(yáng)起來(lái)的一條飄帶。# include graphics.h# include math.h# define PI 3.1415926 void m

48、ain(void) int gdriver=DETECT,gmode,errorcode; int x1,y1,x2,px=320,py=240; double a; initgraph(&gdriver,&gmode,E:TC ); cleardevice(); setbkcolor(9); setcolor(4); for(a=0;a=PI;a+=PI/380) x1=280*cos(1.6*a)+px; y1=497-(90*sin(8*a)*cos(a/2.5)+py); x2=280*cos(1.8*a)+px; line(x1,y1,x2,y1); getch(); closegr

49、aph();3、正多邊形繪圖程序本程序用子程序的方法來(lái)繪制正多邊形#include graphics.h#include math.hvoid polygon(int x0,int y0,int a ,int n, float af) int x,y,i,x2,y2; float dtheta,theta; if(n3) return; dtheta=6.28318/n; theta=af*0.0174533; moveto(x0,y0); x=x0; y=y0; for(i=1;i=3;i-) polygon(x,y,a,i,0.0); getch(); closegraph();5、 簡(jiǎn)單

50、動(dòng)畫(huà)源程序,設(shè)計(jì)人在跑步/* cgwexam0329b.c */#include graphics.h#include conio.h#include stdio.h#include stdlib.h#include dos.hvoid t1(int x1,int x,int y) /*繪制第一幅圖形*/ line(0,y/2+72,x,y/2+72); circle(x1,y/2,10); line(x1,y/2+10,x1-5,y/2+38); line(x1-5,y/2+38,x1+5,y/2+52); line(x1+5,y/2+52,x1-12,y/2+65); line(x1-5,

51、y/2+38,x1,y/2+54); line(x1,y/2+54,x1-8,y/2+70); line(x1-8,y/2+10,x1-8,y/2+35); line(x1,y/2+10,x1+1,y/2+25); line(x1+1,y/2+25,x1+10,y/2+32); void t2(int x1,int x,int y) /*繪制第二幅圖形*/ line(0,y/2+72,x,y/2+72); circle(x1+40,y/2,10); line(x1+40,y/2+10,x1+28,y/2+50); line(x1+28,y/2+52,x1+11,y/2+47); line(x1+30,y/2+40,x1+52,y/2+50); line(x1+52,y/2+50,x1+42,y/2+70); line(x1+39,y/2+11,x1+24,y/2+22); line(x1+24,y/2+22,x1+34,y/2+32)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論