計(jì)算機(jī)圖形學(xué)演示系統(tǒng)_第1頁(yè)
計(jì)算機(jī)圖形學(xué)演示系統(tǒng)_第2頁(yè)
計(jì)算機(jī)圖形學(xué)演示系統(tǒng)_第3頁(yè)
計(jì)算機(jī)圖形學(xué)演示系統(tǒng)_第4頁(yè)
計(jì)算機(jī)圖形學(xué)演示系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

圖書分類號(hào):密級(jí):畢業(yè)設(shè)計(jì)計(jì)算機(jī)圖形學(xué)演示系統(tǒng)開(kāi)發(fā)THEDEVELOPMENTOFCOMPUTERGRAPHICSPRESENTATIONSYSTEMS學(xué)生姓名學(xué)院名稱專業(yè)名稱指導(dǎo)教師2021年5月12日徐州工程學(xué)院學(xué)位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的學(xué)位論文,是本人在導(dǎo)師的指導(dǎo)下,獨(dú)立進(jìn)行研究工作所取得的成果。除文中已經(jīng)注明引用或參考的內(nèi)容外,本論文不含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫過(guò)的作品或成果。對(duì)本文的研究做出重要奉獻(xiàn)的個(gè)人和集體,均已在文中以明確方式標(biāo)注。本人完全意識(shí)到本聲明的法律結(jié)果由本人承當(dāng)。論文作者簽名:日期:年月日徐州工程學(xué)院學(xué)位論文版權(quán)協(xié)議書本人完全了解徐州工程學(xué)院關(guān)于收集、保存、使用學(xué)位論文的規(guī)定,即:本校學(xué)生在學(xué)習(xí)期間所完成的學(xué)位論文的知識(shí)產(chǎn)權(quán)歸徐州工程學(xué)院所擁有。徐州工程學(xué)院有權(quán)保存并向國(guó)家有關(guān)部門或機(jī)構(gòu)送交學(xué)位論文的紙本復(fù)印件和電子文檔拷貝,允許論文被查閱和借閱。徐州工程學(xué)院可以公布學(xué)位論文的全部或局部?jī)?nèi)容,可以將本學(xué)位論文的全部或局部?jī)?nèi)容提交至各類數(shù)據(jù)庫(kù)進(jìn)行發(fā)布和檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。論文作者簽名:導(dǎo)師簽名:日期:年月日日期:年月日摘要計(jì)算機(jī)圖形學(xué)是隨著計(jì)算機(jī)技術(shù)在圖形處理領(lǐng)域中的應(yīng)用而開(kāi)展起來(lái)的學(xué)科,是伴隨著電子計(jì)算機(jī)及其外圍設(shè)備的開(kāi)展而開(kāi)展起來(lái)的,它是計(jì)算機(jī)應(yīng)用學(xué)科的一個(gè)重要分支。為了提高計(jì)算機(jī)圖形學(xué)的課堂教學(xué)效果,我們?cè)O(shè)計(jì)制作了?計(jì)算機(jī)圖形學(xué)教學(xué)演示系統(tǒng)?,該系統(tǒng)直觀地實(shí)現(xiàn)計(jì)算機(jī)圖形學(xué)算法,并具有良好的可擴(kuò)充性。本文在研究相關(guān)可視化理論的根底上,探討當(dāng)前引入可視化教學(xué)的意義,針對(duì)目前計(jì)算機(jī)圖形學(xué)教學(xué)內(nèi)容,確定可視化教學(xué)內(nèi)容及目標(biāo),開(kāi)展計(jì)算機(jī)圖形學(xué)算法可視化教學(xué)的研究和實(shí)踐。在VC++6.0的開(kāi)發(fā)環(huán)境下,開(kāi)發(fā)出?計(jì)算機(jī)圖形學(xué)教學(xué)演示系統(tǒng)?,該系統(tǒng)實(shí)現(xiàn)了根本圖元的生成、多邊形填充、直線段裁剪、曲線生成及圖形的根本幾何變換等。此系統(tǒng)摒棄了計(jì)算機(jī)圖形學(xué)教學(xué)過(guò)程中以理論文稿附之以靜態(tài)圖片的傳統(tǒng)講授形式,運(yùn)用動(dòng)態(tài)演示的可視化技術(shù),開(kāi)發(fā)出一套計(jì)算機(jī)圖形學(xué)可視化教學(xué)演示系統(tǒng)(CAI)。關(guān)鍵詞圖形生成;動(dòng)態(tài)演示;可視化;交互控制AbstractComputerGraphicsisadisciplinedevelopedwithapplicationsofcomputertechnologyinthefieldofgraphicsprocessing.Itisaccompaniedbythedevelopmentofacomputeranditsperipheralequipment,anditisanimportantbranchofthecomputerapplicationdisciplines.Inordertoimproveitsclassroomteachingeffects,wedesignedthe“TeachingPresentationSystemofComputerGraphics〞,inwhichcomputergraphicsalgorithmscanberealizedintuitively,andgoodscalabilitycanbefound.Basedontheresearchtheoryofvisualization,thispaperexploresthemeaningofthecurrentintroductionofthevisualizationteaching.FocusedonthecurrentteachingcontentofComputerGraphics,todeterminethecontentandobjectivesofvisualizationteaching,andcarryoutvisualizationteachingresearchandpracticeofcomputergraphicsalgorithms.OnVC++6.0developingenvironment,“TeachingPresentationSystemofComputerGraphics〞hasbeendeveloped.Thesystemhasdevelopedthebasicelementsofgraphicproduction,polygonfilling,linesegmentcutting,curvegenerationandthebasicgeometrictransformationsofgraphics,whichdiscardsthetraditionallectureformatinthecomputergraphicsteaching--theoreticalpresentationattachedastaticpictureprocess,appliesavisualtechnologyofdynamicpresentation,hasdevelopedasetofpresentationsystemsofcomputergraphicsvisualizationteaching(CAI).Keywordsgraphicsgenerationdynamicpresentationvisualizationalternantcontrol目錄1緒論 11.1課題來(lái)源與背景 1計(jì)算機(jī)輔助教學(xué)(CAI) 1背景與課題來(lái)源 11.2研究的目的與意義 11.3研究的主要內(nèi)容 21.4系統(tǒng)特點(diǎn) 22系統(tǒng)的功能分析與總體設(shè)計(jì) 42.1系統(tǒng)的開(kāi)發(fā)環(huán)境 42.2系統(tǒng)的功能需求分析 4系統(tǒng)開(kāi)發(fā)的內(nèi)容 4系統(tǒng)需要實(shí)現(xiàn)的功能 42.3圖形演示系統(tǒng)的流程 43二維圖形的根本幾何變換 63.1概述 63.2二維圖形的生成原理分析 6直線 6橢圓 7二維變換 8曲線 10直線裁剪 113.2.6多邊形填充 123.3二維圖形的可視化原理分析 13系統(tǒng)的界面設(shè)計(jì) 133.4程序運(yùn)行實(shí)例 144三維圖形的根本幾何變換 154.1概述 154.2三維圖形的生成算法原理分析 15三維變換 15曲面 204.3三維圖形的可視化原理分析 20三維變換 20曲面 234.4程序運(yùn)行實(shí)例 235計(jì)算機(jī)圖形學(xué)演示系統(tǒng)的實(shí)現(xiàn) 255.1系統(tǒng)的類 255.2類的實(shí)現(xiàn) 265.2.1CAppView類 265.2.2CGrapicsDemoView類 265.2.3CMainFrame類 275.3程序控制與操作 31結(jié)論 33致謝 34參考文獻(xiàn) 35附錄 361緒論1.1課題來(lái)源與背景計(jì)算機(jī)輔助教學(xué)(CAI)計(jì)算機(jī)輔助教學(xué)是隨著計(jì)算機(jī)技術(shù)的開(kāi)展而產(chǎn)生和開(kāi)展的。計(jì)算機(jī)輔助教學(xué)(ComputerAssistedInstruction。簡(jiǎn)稱CAI)是指將計(jì)算機(jī)所具有的特殊功能用于教學(xué)的一種教學(xué)形態(tài),在教學(xué)活動(dòng)中,在計(jì)算機(jī)的幫助下,傳遞教學(xué)過(guò)程中的教學(xué)信息,到達(dá)教育目的,從而完成教學(xué)任務(wù)。計(jì)算機(jī)直接介入教學(xué)過(guò)程,并承當(dāng)教學(xué)中某些環(huán)節(jié)的任務(wù),從而到達(dá)提高教學(xué)效果,減輕師生負(fù)擔(dān)的目的。背景與課題來(lái)源計(jì)算機(jī)圖形學(xué)是研究怎樣用計(jì)算機(jī)生成、處理、顯示和輸出圖形的學(xué)科。而圖形學(xué)教學(xué)的關(guān)鍵在于如何將圖形的各種變換生動(dòng)直觀地展示給學(xué)習(xí)者,使學(xué)習(xí)者更深入的理解計(jì)算機(jī)圖形學(xué)的理論和算法原理。傳統(tǒng)的計(jì)算機(jī)圖形學(xué)算法的實(shí)現(xiàn)和開(kāi)發(fā)主要是基于以TurboC為代表的DOS開(kāi)發(fā)環(huán)境,這種方法可視化效果很差,并且缺乏交互控制和動(dòng)態(tài)演示。因而往往會(huì)給學(xué)習(xí)者的理解和深入探討帶來(lái)很大的問(wèn)題。后來(lái),隨著多媒體技術(shù)的開(kāi)展,計(jì)算機(jī)圖形學(xué)的教學(xué)開(kāi)始運(yùn)用靜態(tài)的圖片教學(xué)幻燈片的形式來(lái)講授,這些教學(xué)幻燈片雖然彌補(bǔ)了傳統(tǒng)的黑板板書的缺乏,較大地提高了教學(xué)質(zhì)量,但是這種教學(xué)模式在可視性和交互性方面仍然存在著較大的缺乏。往往讓學(xué)習(xí)者感到很抽象,難以理解。近幾年,編程語(yǔ)言的較快開(kāi)展使計(jì)算機(jī)圖形學(xué)CAI教學(xué)系統(tǒng)有了很大的進(jìn)步。使CAI教學(xué)系統(tǒng)實(shí)現(xiàn)了計(jì)算機(jī)圖形學(xué)理論的實(shí)踐化,能使學(xué)習(xí)者通過(guò)交互式的操作,更深入了解計(jì)算機(jī)理論的用法,但是這種教學(xué)系統(tǒng)無(wú)法學(xué)習(xí)者看見(jiàn)圖形生成的源程序,在幫助學(xué)習(xí)者對(duì)理論的深入理解上仍存在著些許缺乏,使他們無(wú)法真正體會(huì)圖形生成的算法原理。目前,還有一種教學(xué)模式是采用flash動(dòng)畫演示并配加一定文字說(shuō)明的方式,這種方式可以在很大程度上揭示圖形生成的算法原理,遺憾的是不能很全面的演示教學(xué)內(nèi)容,缺乏交互性,不能讓學(xué)習(xí)者自己輸入相關(guān)的參數(shù)。為此,本文在ViusalC++6.0的編程環(huán)境下,開(kāi)發(fā)了一套專門致力于幫助學(xué)習(xí)者理解計(jì)算機(jī)圖形學(xué)理論的動(dòng)態(tài)演示系統(tǒng)。該系統(tǒng)將可視性,交互性和可擴(kuò)展性緊緊地結(jié)合在一起,能夠大大改善傳統(tǒng)教學(xué)的弊端,使復(fù)雜的難以理解的計(jì)算機(jī)圖形學(xué)理論通過(guò)教師的課堂演示和學(xué)習(xí)者的不斷自我交互式操作試驗(yàn)變得通俗明朗,有效地提高教學(xué)的質(zhì)量和效果。特別是本文在圖形學(xué)可視化和交互式操作方面進(jìn)行了深入研究,這些也是本系統(tǒng)最重要的亮點(diǎn)。1.2研究的目的與意義本文研究的目的是在VC++6.0開(kāi)發(fā)環(huán)境下,實(shí)現(xiàn)動(dòng)態(tài)演示過(guò)程。并在演示過(guò)程中表達(dá)出圖形生成的可視化,實(shí)現(xiàn)直線的生成、直線剪切、多邊形填充、二維圖形的根本幾何變換、三維圖形的根本幾何變換以及Bezier曲線變換的生成與變換過(guò)程,從而提高學(xué)生的學(xué)習(xí)興趣,加深學(xué)生對(duì)算法和圖形生成原理的理解和認(rèn)識(shí)。最終到達(dá)提高教學(xué)質(zhì)量的目的。本系統(tǒng)研究的意義在于它能直觀地演示計(jì)算機(jī)圖形學(xué)繁瑣的內(nèi)容,使計(jì)算機(jī)圖形學(xué)比擬抽象的內(nèi)容具體化,能夠提起學(xué)生的興趣,從而可以較大的提高教學(xué)質(zhì)量,提高教學(xué)效率。再者,計(jì)算機(jī)圖形學(xué)演示系統(tǒng)也可以給其它學(xué)科的可視化系統(tǒng)的開(kāi)發(fā)提供一定的參考價(jià)值。1.3研究的主要內(nèi)容本文理論與實(shí)踐相結(jié)合,在認(rèn)真分析了圖形學(xué)算法原理的根底上,提出了一種將圖形生成過(guò)程與圖形的變換過(guò)程同步可視化演示的新思路,實(shí)現(xiàn)了計(jì)算機(jī)圖形學(xué)中大局部圖形的可視化演示。論文研究的主要內(nèi)容及結(jié)構(gòu)安排如下:第一章,概述計(jì)算機(jī)圖形學(xué)輔助教學(xué)系統(tǒng)的研究背景,研究目的和研究意義。第二章,主要介紹了系統(tǒng)的開(kāi)發(fā)環(huán)境,系統(tǒng)的功能需求分析以及系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)。第三章,主要講述了計(jì)算機(jī)圖形學(xué)中二維圖形的可視化方法,其中包括直線,橢圓的可視化方法,各種二維變換的可視化,和各種曲線的可視化實(shí)現(xiàn)原理,直線裁減和多邊形裁減的可視化,最后還給出了局部實(shí)例。第四章,主要講述了計(jì)算機(jī)圖形學(xué)中三維圖形的可視化方法,其中包括三維圖形的比例、平移、旋轉(zhuǎn)和錯(cuò)切變換,Bezier曲面的可視化,最后還給出了局部實(shí)例。第五章,重點(diǎn)講述了系統(tǒng)實(shí)現(xiàn)的各主要的類之間的層次關(guān)系,同時(shí)將其中的主要的類作了詳細(xì)介紹,說(shuō)明了類中的函數(shù)的調(diào)用關(guān)系,最后還簡(jiǎn)單說(shuō)明了程序的操作和控制方法。第六章,主要介紹了本文的工作總結(jié),提出了本文的創(chuàng)新點(diǎn),本文存在的缺乏以及未來(lái)工作的展望。1.4系統(tǒng)特點(diǎn)本文在VC++6.0的環(huán)境下,開(kāi)發(fā)了一套全新的集可視性,交互性于一體的計(jì)算機(jī)圖形學(xué)演示系統(tǒng),本系統(tǒng)的主界面如圖1-1所示。圖1-1系統(tǒng)的主界面本文根據(jù)計(jì)算機(jī)圖形學(xué)的根本理論,運(yùn)用各種動(dòng)態(tài)演示的方法,將直線的生成、直線剪切、多邊形填充、二維圖形的根本幾何變換、三維圖形的根本幾何變換以及Bezier曲線變換的生成過(guò)程以及變化過(guò)程的顯示在學(xué)習(xí)者面前。本系統(tǒng)的主要特點(diǎn)如下:(l)界面友好本系統(tǒng)充分利用了VC++編程語(yǔ)言界面友好的特點(diǎn),在程序界面中增加了控制工具欄,所有圖標(biāo)都設(shè)定了提示和狀態(tài)欄提示幫助,極大的方便了學(xué)習(xí)者的使用。(2)可視性強(qiáng)本系統(tǒng)擺脫了以往的靜態(tài)文字說(shuō)明的教學(xué)方式,將圖形的實(shí)現(xiàn)過(guò)程以動(dòng)態(tài)的方式一步步演示出來(lái),給學(xué)生一種耳目一新的感覺(jué)。動(dòng)態(tài)的演示效果大大地激發(fā)了學(xué)生的學(xué)習(xí)興趣,讓學(xué)生對(duì)圖形生成的算法原理有了更直接和更真實(shí)的認(rèn)識(shí)。(3)可操作性強(qiáng)本系統(tǒng)采用了VC++里面的單文檔界面,增加了對(duì)演示程序的操作菜單,學(xué)生可以通過(guò)選擇更改參數(shù)或者選擇放大圖形、縮小圖形、復(fù)位等菜單來(lái)控制程序的運(yùn)行,實(shí)現(xiàn)了學(xué)生與程序的交互,極大的提高了教學(xué)質(zhì)量。(4)可擴(kuò)展性強(qiáng)本系統(tǒng)具有良好的擴(kuò)展性,可以在短時(shí)間內(nèi)參加新的圖形的生成算法可視化的動(dòng)態(tài)演示。2系統(tǒng)的功能分析與總體設(shè)計(jì)2.1系統(tǒng)的開(kāi)發(fā)環(huán)境本文是在WindowXP的環(huán)境下開(kāi)發(fā)的。以VC++6.0為開(kāi)發(fā)語(yǔ)言,主要是基于以下原因:1.VC++6.0的界面友好,在VC++6.0的MFC類庫(kù)中,可以多種文檔界面和對(duì)話框界面等,可以比擬容易借鑒已有的相關(guān)文獻(xiàn),同時(shí)也不失美觀。2.功能強(qiáng)大,可擴(kuò)展性好。VC++6.0良好的擴(kuò)展性可以使一些新的想法系統(tǒng)的編程過(guò)程中比擬容易實(shí)現(xiàn)。2.2系統(tǒng)的功能需求分析系統(tǒng)開(kāi)發(fā)的內(nèi)容計(jì)算機(jī)圖形學(xué)演示系統(tǒng)研究的內(nèi)容主要有:實(shí)現(xiàn)直線的生成、直線剪切、多邊形填充、二維圖形的根本幾何變換〔平移、等比例放大縮小、旋轉(zhuǎn)、反射、錯(cuò)切〕、三維圖形的根本幾何變換〔平移、等比例放大縮小、旋轉(zhuǎn)、反射、錯(cuò)切〕以及Bezier曲線變換的生成過(guò)程以及變化過(guò)程。系統(tǒng)需要實(shí)現(xiàn)的功能文件功能:能夠新建和退出程序。界面控制功能:能夠通過(guò)菜單欄、工具欄以及右擊的方式簡(jiǎn)單直觀的畫出直線、矩形以及橢圓,并能通過(guò)菜單調(diào)用相關(guān)圖形演示。參數(shù)設(shè)置功能:能夠通過(guò)調(diào)用對(duì)話框的形式對(duì)局部演示圖形的相關(guān)參數(shù)進(jìn)行修改。動(dòng)態(tài)演示功能:可以實(shí)現(xiàn)圖形的生成與變換的過(guò)程,實(shí)現(xiàn)計(jì)算機(jī)圖形學(xué)的可視化。放大縮小功能:能夠通過(guò)菜單欄或工具欄實(shí)現(xiàn)圖形的等比縮放的功能。單步執(zhí)行功能:點(diǎn)擊工具欄的單步執(zhí)行圖標(biāo),繪圖區(qū)會(huì)一步一步的執(zhí)行整個(gè)算法的演示過(guò)程。2.3圖形演示系統(tǒng)的流程計(jì)算機(jī)圖形學(xué)演示系統(tǒng)流程圖如圖2-1所示:圖2-1系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)圖3二維圖形的根本幾何變換3.1概述本系統(tǒng)在對(duì)計(jì)算機(jī)圖形學(xué)的算法可視化的時(shí)候,分別對(duì)二維圖形和三維圖形運(yùn)用了不同的方法來(lái)實(shí)現(xiàn),所以本文將把二維圖形和三維圖形的可視化分開(kāi)來(lái)討論,這一章主要探討二維圖形的可視化的方法,在下一章將探討三維圖形的可視化方法。二維圖形包括直線、橢圓、曲線、裁剪、填充、二維變換等,其中每種圖形又包括不同的算法,比方,直線的常見(jiàn)算法有DDA算法、Bresenham算法、中點(diǎn)算法等。在數(shù)學(xué)上,所有的圖形都是以點(diǎn)為最小單位按一定的規(guī)律組合而成的集合。為了將圖形在計(jì)算機(jī)上顯示出來(lái),實(shí)際上就是找出這種排列的規(guī)律,然后在顯示器所給定的有限個(gè)像素組成的矩陣中確定逼近于該圖形的最正確像素組,并且按一定的順序?qū)@些像素進(jìn)行寫操作。圖形學(xué)生成算法的可視化就是在解讀圖形顯示原理的根底上,通過(guò)創(chuàng)立“虛擬柵格〞來(lái)模仿計(jì)算機(jī)的“象素點(diǎn)〞,結(jié)合圖形生成的算法,計(jì)算出圖形在虛擬柵格中的最正確逼近“象素點(diǎn)〞,然后以畫圓來(lái)代替這些“象素點(diǎn)〞的方式顯示圖形。下面我們將對(duì)這些二維圖形的可視化原理逐一分析。3.2二維圖形的生成原理分析直線直線作為最簡(jiǎn)單的圖形,是生成其它復(fù)雜圖形的根底。直線是點(diǎn)的集合,在幾何學(xué)中直線被定義為兩個(gè)點(diǎn)之間的最短距離。也就是說(shuō)一條直線是指所有在它上面的點(diǎn)的集合。直線可以向一個(gè)方向及其相反的方向無(wú)限延長(zhǎng),這不是計(jì)算機(jī)圖形學(xué)中所需要的,在圖形學(xué)中研究的對(duì)象是直線段。下面我們來(lái)研究直線上只存在于兩個(gè)端點(diǎn),和之間的任意點(diǎn)。例如,線段的起點(diǎn)坐標(biāo),終點(diǎn)坐標(biāo),這兩個(gè)點(diǎn)就確定了這條線段,并用線段上的任意一點(diǎn)均滿足:畫一條直線實(shí)際上是根據(jù)一系列計(jì)算出來(lái)并與該線靠近的像素繪制的,當(dāng)我們要在屏幕上顯示一條直線時(shí),只能在顯示器所給定的有限個(gè)像素組成的矩陣中確定最正確逼近于該直線的一組像素,并且按掃描線順序?qū)@些像素進(jìn)行寫操作。這就是通常所說(shuō)的用顯示器繪制直線,或直線的掃描轉(zhuǎn)換。直線的最常見(jiàn)的掃描轉(zhuǎn)換方式有數(shù)值微分法(DDA算法),中點(diǎn)法和Bresenham算法。它們的算法原理在計(jì)算機(jī)圖形學(xué)的很多書上都介紹的很清楚,在這里我們就不多談了,可以參考文獻(xiàn)[13]。3.2.2橢圓中心在原點(diǎn)、軸對(duì)齊的橢圓的非參數(shù)化方程為:(3.1)式3.1可用隱式方程表示為:由于橢圓的對(duì)稱性,僅考慮在第一象限的橢圓弧即可。對(duì)隱函數(shù)求導(dǎo)可得,由于可知橢圓在第一象限內(nèi)單調(diào)遞減,在區(qū)間內(nèi)切線的斜率從0遞減到。為了使生成的橢圓具有封閉性,以弧上斜率為-1的點(diǎn)作為分界,把橢圓弧分成上下兩局部。上半局部滿足即,的變化量大于的變化量,由從點(diǎn)開(kāi)始遞增步長(zhǎng)來(lái)確定的值,下半局部滿足即,的變化量大于的變化量,由從點(diǎn)開(kāi)始遞增步長(zhǎng)來(lái)確定的值。由于這兩局部是相互獨(dú)立的,可用兩個(gè)處理器(或線程)并行處理,而不用考慮同步問(wèn)題,從而能最大化的提高并行效率,見(jiàn)圖3-1。圖3-1第一象限的橢圓弧對(duì)于上半局部,假設(shè)點(diǎn)為那么下一點(diǎn)在其右方點(diǎn)或右下方點(diǎn)中選擇離橢圓弧最近的點(diǎn),而為右方點(diǎn)到橢圓弧的距離,為右下方點(diǎn)到橢圓弧的距離,通過(guò)做差:可判斷出所要選擇的點(diǎn),即:選擇右方的點(diǎn),選擇右下方的點(diǎn).根據(jù)所得到的利用上述思想推下一點(diǎn)即可得到與的遞推關(guān)系式:根據(jù)遞推關(guān)系式和點(diǎn)就可得到所有上半局部的點(diǎn)。對(duì)于下半局部,假設(shè)點(diǎn)為,那么下一點(diǎn)在其上方點(diǎn)或左上方點(diǎn)中選擇離橢圓弧最近的點(diǎn),而為上方點(diǎn)到橢圓弧的距離,為左上方點(diǎn)到橢圓弧的距離,通過(guò)做差:可判斷出所要選擇的點(diǎn),即:選擇上方的點(diǎn),選擇左上方的點(diǎn)。根據(jù)所得到的利用上述思想推下一點(diǎn)即可得到與的遞推關(guān)系式:根據(jù)遞推關(guān)系式和點(diǎn)(a,0)就可得到所有下半局部的點(diǎn).通過(guò)上下局部擬合得到所有橢圓上的點(diǎn)。橢圓的掃描轉(zhuǎn)換算法主要有DDA算法,中點(diǎn)算法,Bresnham算法以及正負(fù)步法和雙步法。二維變換1.點(diǎn)的變換在二維的平面空間中,我們用來(lái)表示平面上的一點(diǎn)。由于點(diǎn)集可以用矩陣的形式表示,所以我們對(duì)點(diǎn)的變換可以通過(guò)相應(yīng)的矩陣運(yùn)算來(lái)實(shí)現(xiàn)。即:舊點(diǎn)集×變換矩陣新點(diǎn)集2.平移變換將圖形上的點(diǎn)分別在X軸方向〔水平方向〕和Y軸方向〔垂直方向〕移動(dòng)和,那么變換后的點(diǎn)坐標(biāo)值為:3.等比例變換以原點(diǎn)為中心,將圖形各坐標(biāo)的X分量和Y分量分別乘以和,那么可使圖形進(jìn)行整體的放大和縮小。這時(shí),當(dāng)=時(shí),圖形作相似變換;當(dāng)時(shí),圖形產(chǎn)生變形。利用齊次坐標(biāo)表示的比例變換為:4.旋轉(zhuǎn)以原點(diǎn)為中心,將點(diǎn)旋轉(zhuǎn)角度后得到新的一點(diǎn),其旋轉(zhuǎn)變換表達(dá)式為:(3.2)用齊次坐標(biāo)表示的旋轉(zhuǎn)變換為:(3.3)(3.4)在(3.2)至(3.4)式中,逆時(shí)針旋轉(zhuǎn)取正值,順時(shí)針旋轉(zhuǎn)負(fù)值。5.錯(cuò)切圖形的錯(cuò)切變換可以分為沿x方向錯(cuò)切,沿y方向錯(cuò)切。假設(shè)圖形上的任意一點(diǎn)的坐標(biāo)為,將它進(jìn)行二維錯(cuò)切變換后得到新的一點(diǎn),坐標(biāo)變換矩陣的一般形式為:(1)沿方向錯(cuò)切:沿方向錯(cuò)切,坐標(biāo)變換公式為:沿方向錯(cuò)切,坐標(biāo)變換公式為:(2)沿方向錯(cuò)切:沿方向錯(cuò)切,坐標(biāo)變換公式為:沿方向錯(cuò)切,坐標(biāo)變換公式為:6.以X軸為對(duì)稱軸的對(duì)稱變換點(diǎn)以X軸為對(duì)稱軸的點(diǎn)坐標(biāo)為:變換矩陣為:變換式為:7.以Y軸為對(duì)稱軸的對(duì)稱變換以Y軸為對(duì)稱軸的變換矩陣為:變換式為:8.以原點(diǎn)為對(duì)稱點(diǎn)的對(duì)稱變換以原點(diǎn)為對(duì)稱點(diǎn)的變換矩陣為:變換式為:曲線1.Bezier曲線貝賽爾(Bezier)曲線是有多項(xiàng)式調(diào)和函數(shù)推導(dǎo)出來(lái)的,通常n+1個(gè)頂點(diǎn)定義一個(gè)n次多項(xiàng)式。Bezier曲線的參數(shù)方程表示如下:(3.5)在式(3.5)中,表示特征多邊形n+1個(gè)頂點(diǎn)的位置向量,是伯恩斯坦(Bernstein)多項(xiàng)式,稱為基函數(shù),也就是貝賽爾多邊形的各頂點(diǎn)位置向量之間的調(diào)和函數(shù)。該函數(shù)的表達(dá)式為:2.三次B樣條曲線由于Bernstein基函數(shù)構(gòu)造的Bezier曲線不能作局部修改,而且拼接比擬復(fù)雜,有人找到了B樣條方法,在保存Bezier方法全部?jī)?yōu)點(diǎn)的同時(shí),克服了Bezier方法的弱點(diǎn)。通常,給定m+n+1個(gè)頂點(diǎn),可以定義段n次的參數(shù)曲線為:式中,為n次B樣條基函數(shù),也稱為B樣條分段混合函數(shù)。其形式為:連接全部曲線段所組成的整條曲線稱為n次B樣條曲線。依次用線段連接所組成的多邊形拆線稱為B樣條曲線在第i段的B特征多邊形。n次B樣條曲線可到達(dá)n-1階連續(xù)。直線裁剪直線的裁剪算法最常見(jiàn)的有Cohen-Sutherland裁剪法,矢量裁剪法和中點(diǎn)裁剪法。這里我們用中點(diǎn)裁剪法來(lái)解決直線裁剪問(wèn)題。該算法的根本思想是:分別尋找直線段兩個(gè)端點(diǎn)各自對(duì)應(yīng)最遠(yuǎn)的可見(jiàn)點(diǎn),只要該線段能在窗口內(nèi)留下一個(gè)可見(jiàn)段,那么這個(gè)最遠(yuǎn)的可見(jiàn)點(diǎn)只有兩個(gè)選擇,要么是直線段的一個(gè)相應(yīng)端點(diǎn);要么是在不斷中點(diǎn)再分過(guò)程中產(chǎn)生的某個(gè)子段的中點(diǎn)。圖3-2中點(diǎn)分割裁剪下面,我們以找出直線段上離點(diǎn)最遠(yuǎn)的可見(jiàn)點(diǎn)為例。來(lái)對(duì)中點(diǎn)再分割裁剪法加以說(shuō)明。算法步驟如下:(1)檢驗(yàn)直線段是否完全被排斥在窗口之外。如果是,過(guò)程結(jié)束且無(wú)輸出線段〔如圖3-2中的線段b〕;否那么繼續(xù)執(zhí)行下一步。(2)檢驗(yàn)點(diǎn)是否可見(jiàn)。如果是,那么點(diǎn)就是離點(diǎn)最遠(yuǎn)的可見(jiàn)點(diǎn),過(guò)程結(jié)束〔圖3-2中的線段a〕如果點(diǎn)是不可見(jiàn)的〔如圖3-2中的線段c或線段d〕,那么繼續(xù)執(zhí)行下一步。(3)分割直線段于中點(diǎn)〔這是為了估計(jì)離點(diǎn)最遠(yuǎn)的可見(jiàn)點(diǎn),把它簡(jiǎn)單的取作中點(diǎn)〕。如果線段被完全排斥在窗口外,那么原估計(jì)缺乏〔如圖3-2中線段d〕,便以線段作為新的線段從算法的第一步重新開(kāi)始執(zhí)行。反復(fù)執(zhí)行上述三步,直到找到離點(diǎn)最遠(yuǎn)的可見(jiàn)點(diǎn)為之。這里要注意的是:在判斷中點(diǎn)和窗口邊框相重時(shí),一般不需要坐標(biāo)值一定相等,也不大可能,只要在精度許可的前提下,給出一個(gè)誤差允許范圍即可。3.2.6多邊形填充區(qū)域是指相互連通的一組像素的集合。區(qū)域通常由一個(gè)封閉的輪廓來(lái)定義,處于一個(gè)封閉輪廓線內(nèi)的所有像素點(diǎn)即構(gòu)成一個(gè)區(qū)域。所謂區(qū)域填充就是將區(qū)域內(nèi)的像素置成新的顏色值或圖案。我們以圖3-3所示的多邊形為例,建立其邊表ET,如圖3-4所示。圖3-3多邊形圖3-4多邊形的邊表由圖3-3和圖3-4可得其對(duì)應(yīng)的活動(dòng)邊表〔AET〕,圖3-5列出了圖3-3中多邊形在掃描線為4、5、6時(shí)的AET表。圖3-5活動(dòng)邊表由此可得如下算法:〔1〕根據(jù)給出的頂點(diǎn)坐標(biāo)數(shù)據(jù),按遞增順序建立如圖3-4所示的ET表。〔2〕根據(jù)AET指針,使之為空。〔3〕使〔為頂點(diǎn)坐標(biāo)中最小值〕?!?〕反復(fù)做下述各步,直至〔頂點(diǎn)坐標(biāo)中的最大值〕或ET與AET為空:①將ET表參加到AET中,并保持AET鏈中的記錄按值增大排序;②對(duì)掃描線依次成對(duì)取出AET中值,并在每對(duì)之間填上所要求的顏色或圖案;③從AET表中刪去的記錄;④對(duì)保存下來(lái)的AET中的每一個(gè)記錄,用代替,并重新按遞增排序;⑤使,以便進(jìn)入下一輪循環(huán)。3.3二維圖形的可視化原理分析系統(tǒng)的界面設(shè)計(jì)本系統(tǒng)的界面較為簡(jiǎn)單,共有三個(gè)局部:第一局部是菜單欄,這局部是通過(guò)簡(jiǎn)單的菜單命令來(lái)實(shí)現(xiàn)圖形的生成與變化,它主要通過(guò)ResourceView工程編輯器中Menu控件來(lái)實(shí)現(xiàn),通過(guò)單擊菜單命令的方式使圖形演示一步一步的執(zhí)行。第二局部是工具欄,這局部是通過(guò)簡(jiǎn)單直觀的動(dòng)態(tài)按鈕來(lái)實(shí)現(xiàn)圖形的生成與變化,其目的是讓學(xué)習(xí)者更簡(jiǎn)單更方便的來(lái)實(shí)現(xiàn)圖形是生成與變換。該局部是通過(guò)ResourceView工程編輯器中Toolbar控件來(lái)實(shí)現(xiàn)。第三局部是二維圖形生成過(guò)程的動(dòng)態(tài)演示,該局部主要是分步顯示各種圖形的動(dòng)態(tài)生成過(guò)程,目的是讓學(xué)習(xí)者明白各種圖形的每一步是怎樣生成的,幫助學(xué)習(xí)者理解算法本質(zhì),這一局部用一個(gè)視圖窗口類CDemoView來(lái)實(shí)現(xiàn)。二維圖形變換演示系統(tǒng)如圖3-6:圖3-6系統(tǒng)運(yùn)行界面3.4程序運(yùn)行實(shí)例圖3-5至圖3-10是本文中局部二維圖形的可視化的實(shí)例。它們分別是橢圓的生成〔直線、矩形的可視化分別見(jiàn)附錄中圖1-1和圖1-2〕、二維圖形的錯(cuò)切變換〔二維圖形的縮放、平移、旋轉(zhuǎn)以及反射的可視化分別見(jiàn)附錄中圖1-3到圖1-5〕、直線剪切、多邊形填充、三次B樣條曲線以及Bezier曲線的動(dòng)態(tài)生成與變換過(guò)程的可視化。圖3-7橢圓的可視化圖3-8二維圖形錯(cuò)切直線裁剪的可視化,還有多邊形填充,三次B樣條曲線和Bezier曲線。在這些圖中,直線,矩形和橢圓的可視化原理都一樣,對(duì)于平移變換、比例變換、旋轉(zhuǎn)變換、反射變換和錯(cuò)切變換,本文分別用正三角形和矩形作為樣例演示了其變化過(guò)程;對(duì)于直線裁剪和多邊形填充,本文根據(jù)上文提出的原理,采用相似的界面和演示窗口,分別演示了它們的變換過(guò)程。圖3-9直線剪裁圖3-10多邊形填充 圖3-11三次B樣條曲線圖3-12Bezier曲線 4三維圖形的根本幾何變換4.1概述我們?cè)谇耙徽吕锾岬?,本系統(tǒng)在對(duì)計(jì)算機(jī)圖形學(xué)的算法可視化的時(shí)候,分別對(duì)二維圖形和三維圖形運(yùn)用了不同的方法來(lái)實(shí)現(xiàn),所以本文將把二維圖形和三維圖形的可視化分開(kāi)來(lái)討論,前一章探討了二維圖形的可視化的方法,在這一章將主要探討三維圖形的可視化方法。三維圖形主要包括三維變換,其中三維變換包括三維平移變換,三維比例變換,三維旋轉(zhuǎn)變換,三維反射變換,三維錯(cuò)切變換等。除了介紹三維變換和曲面以外,我們?cè)谶@章還要簡(jiǎn)要的談?wù)務(wù)鎸?shí)感圖形的實(shí)現(xiàn)。三維圖形的可視化與二維圖形的可視化有所不同,二維的空間已經(jīng)無(wú)法滿足圖形變換的需求,而只能通過(guò)建立了三維的坐標(biāo)系來(lái)實(shí)現(xiàn)一系列變化,下面我們將對(duì)這些三維圖形的可視化原理逐一分析。4.2三維圖形的生成算法原理分析三維變換1.概述三維圖形生成與變換是計(jì)算機(jī)圖形學(xué)中的一個(gè)根本問(wèn)題,也是計(jì)算機(jī)圖形學(xué)一個(gè)最重要的局部。三維圖形生成比二維圖形要復(fù)雜的多,其根本原因在于我們的圖形輸入設(shè)備和輸出設(shè)備根本上都是二維的,用這些二維的圖形設(shè)備去表現(xiàn)空間三維實(shí)體自然會(huì)增加許多復(fù)雜性,尤其是需要運(yùn)用許多與處理二維圖形不同的方法去處理三維圖形。這里我們以二維圖形根本的平移、比例和旋轉(zhuǎn)變換組合為根底,通過(guò)矩陣的相乘或者連接來(lái)構(gòu)造三維所需矩陣,從而來(lái)實(shí)現(xiàn)三維圖形圖像的顯示、處理和形體的構(gòu)造?;诙S圖形變換,在三維圖形變換中我們同樣用齊次坐標(biāo)法來(lái)表示三維圖形中的點(diǎn),因此,對(duì)于三維空間點(diǎn)需要用4個(gè)數(shù)來(lái)表示,而相應(yīng)的變換矩陣為階矩陣,我們用表示變換前三維空間的一個(gè)點(diǎn),用表示變換后的結(jié)果,那么空間點(diǎn)的變換式為:式中為三維圖形變換矩陣,它是階方陣,即我們將階方陣分成4個(gè)子矩陣,其各自作用如下::產(chǎn)生比例,對(duì)稱,旋轉(zhuǎn),錯(cuò)切四種根本變換。:產(chǎn)生沿三個(gè)軸向的平移變換。:產(chǎn)生透視投影變換。:產(chǎn)生全比例變換。就變換矩陣和坐標(biāo)軸的關(guān)系來(lái)說(shuō):T的第一列元素主管X軸方向坐標(biāo)的變化,第二列元素主管Y軸方向坐標(biāo)的變化,第三列元素主管Z軸方向坐標(biāo)的變化。而第四列元素將影響透視變換。下面我們分別介紹各種變換的算法原理。2.平移變換三維圖形上的點(diǎn),沿X

、Y

、Z軸分別移動(dòng)時(shí),所得新點(diǎn)的坐標(biāo)為:程序設(shè)計(jì)為:xw=x;yw=y;zw=zx=xw+txy=yw+tyz=zw+tz三維坐標(biāo)點(diǎn)可用齊次坐標(biāo)表示為。當(dāng)設(shè)X

、Y

、Z軸的移動(dòng)量分別為時(shí),齊次坐標(biāo)變換矩陣表達(dá)式為:3.比例變換在三維坐標(biāo)系中,圖形上的點(diǎn)以坐標(biāo)原點(diǎn)為中心分別沿X

、Y

、Z軸放大或縮小倍、倍、倍時(shí),所得新點(diǎn)的坐標(biāo),的值分別為:程序設(shè)計(jì)為:比例變換的齊次坐標(biāo)矩陣表達(dá)式為:當(dāng)時(shí),矩陣變換式為:4.旋轉(zhuǎn)變換三維旋轉(zhuǎn)變換是指空間立體繞坐標(biāo)軸旋轉(zhuǎn)角,正負(fù)按右手定那么確定,即右手拇指指向轉(zhuǎn)軸正向,其余4個(gè)手指指向便是角正角,如圖4-1。旋轉(zhuǎn)變換前后立體的大小和形狀不變,只是空間位置相對(duì)原位置發(fā)生了變化。當(dāng)空間立體繞某一坐標(biāo)軸旋轉(zhuǎn)時(shí),立體上各點(diǎn)在此軸坐標(biāo)值不變,而在該坐標(biāo)軸所垂直的另兩坐標(biāo)軸所組成的坐標(biāo)平面上的坐標(biāo)值相當(dāng)于一個(gè)二維的旋轉(zhuǎn)變換。圖4-l三維旋轉(zhuǎn)變換角符號(hào)根據(jù)二維平面的旋轉(zhuǎn),我們可以得到在三維空間的旋轉(zhuǎn)變換矩陣表示。l)繞X軸旋轉(zhuǎn)角的矩陣表示如下:變換結(jié)果為:即:2)繞Y軸旋轉(zhuǎn)角的矩陣表示如下:變換結(jié)果為:即:3)繞Z軸旋轉(zhuǎn)的矩陣表示如下:變換結(jié)果為:即:5.錯(cuò)切變換圖形沿X軸、Y軸、Z軸錯(cuò)切時(shí),其變換矩陣的一般表達(dá)式為:根據(jù)矩陣中其余六個(gè)元素之一為0,可以生成六種不同的錯(cuò)切變換。l)沿X方向含Y錯(cuò)切錯(cuò)切平面沿X軸方向滑移,變換矩陣為:2)沿Z方向含Y錯(cuò)切錯(cuò)切平面沿Z軸方向滑移。變換矩陣為:3)沿Y方向含X錯(cuò)切錯(cuò)切平面沿Y軸方向滑移,變換矩陣為:4)沿X方向含Z錯(cuò)切錯(cuò)切平面沿軸X軸方向滑移,變換矩陣為:5)沿Y方向含Z錯(cuò)切錯(cuò)切平面沿Y軸方向滑移,變換矩陣為:6)沿Z方向含X錯(cuò)切錯(cuò)切平面沿Z軸方向滑移,變換矩陣為:為了直觀演示三維圖形的錯(cuò)切變換,以下圖提供了一些截圖樣例:圖4-2X方向錯(cuò)切圖4-3Y方向錯(cuò)切圖4-4Z方向錯(cuò)切曲面曲面包括貝塞爾(Bezier)曲面、拋物面以及B樣條曲面等,本文主要討論貝塞爾(Bezier)曲面的生成與動(dòng)態(tài)演示。由Bezier曲線可以容易地得到張量積Bezier曲面,在空間給定個(gè)點(diǎn),稱以下張量積形式的參數(shù)曲面為次的Bezier曲面。(4.1)在式4.1中,是Bezier曲面的基函數(shù)。依次用線段連接點(diǎn)列中相鄰兩點(diǎn)所形成的空間網(wǎng)格,稱之為Bezier曲面的特征網(wǎng)格。Bezier曲面的矩陣表示為:在實(shí)際應(yīng)用中m和n的取值小于4,本文在可視化過(guò)程中。4.3三維圖形的可視化原理分析三維變換1.坐標(biāo)系的建立及轉(zhuǎn)換任何一個(gè)圖形都必須存在于一個(gè)參考坐標(biāo)系中,本文為三維圖形采用的是正等軸測(cè)坐標(biāo)系。該坐標(biāo)系如圖4-5所示在該坐標(biāo)系中,將Y正方向設(shè)定為水平向左,Z軸正方向?yàn)樨Q直向上,X軸的正方向?yàn)榕c水平方向成45度角。我們知道,正等軸測(cè)坐標(biāo)系的三個(gè)軸向變形系數(shù)相等。即:其中,分別為軸,軸,軸的軸向變形系數(shù)。于是,根據(jù)斜軸測(cè)投影變換的矩陣,可得出以下方程式:解得:取最后可以得到正等軸測(cè)的投影變換矩陣為:于是我們可以得到任意的一個(gè)三維點(diǎn)(x,y,z)經(jīng)過(guò)變換后在平面上的坐標(biāo)值(XX,YY,ZZ),它門之間的轉(zhuǎn)換計(jì)算公式如下:通過(guò)計(jì)算后,所有的YY值都等于0,這是因?yàn)樵谄矫嫔现荒茱@示二維坐標(biāo)。最后我們還要將這個(gè)坐標(biāo)轉(zhuǎn)換為計(jì)算機(jī)的設(shè)備坐標(biāo)系中的坐標(biāo)。假設(shè)設(shè)備坐標(biāo)中的坐標(biāo)是(xx,yy),它們之間的轉(zhuǎn)換關(guān)系公式如下:其中,分別表示曲面坐標(biāo)系的坐標(biāo)原點(diǎn)在設(shè)備坐標(biāo)系中的相對(duì)坐標(biāo)。圖4-5三維坐標(biāo)2.算法可視化的動(dòng)態(tài)演示算法可視化的任務(wù)就是,動(dòng)態(tài)演示圖形變化的全過(guò)程,并將控制命令的改變而引起的影響以改變圖形的形式直觀地呈現(xiàn)在讀者者面前,深入體會(huì)每個(gè)控件在圖形變換中的功能及作用,從而到達(dá)透徹理解算法本身的目的。以三維變換中的平移變換為例,在三維變換矩陣中,控制命令分別代表三維圖形向左、向右、向上、向下、與X正半軸成45°向上、與X負(fù)半軸成45°向下這六個(gè)移動(dòng)方向,動(dòng)態(tài)演示時(shí),本文將這六個(gè)控件與圖形的變化聯(lián)系起來(lái),做到根據(jù)設(shè)置的平移方向來(lái)決定每次動(dòng)態(tài)演示時(shí)的平移方向。本文中實(shí)現(xiàn)三維交換的流程圖如圖4-6所示:圖4-6三維交換的流程圖Step1:判斷動(dòng)態(tài)演示的類型,主要有三維平移變換,旋轉(zhuǎn)變換,比例變換,錯(cuò)切變換,反射變換等。Step2:根據(jù)不同的變換類型,通過(guò)菜單控件或者工具控件來(lái)調(diào)用它們的成員函數(shù),并在窗口視圖中做出相應(yīng)的響應(yīng)。在動(dòng)態(tài)演示視圖中,主要是畫出變換前的坐標(biāo)系以及三維圖形,為下一步變換做好準(zhǔn)備。Step3:動(dòng)態(tài)演示開(kāi)始。Step4:根據(jù)動(dòng)態(tài)演示,在視圖窗口中做出相應(yīng)的變化。在動(dòng)態(tài)演示視圖中,通過(guò)控件來(lái)顯示相應(yīng)的變換過(guò)程,每個(gè)控件對(duì)應(yīng)著一種變化,這樣以來(lái),讀者可以直觀看見(jiàn)圖形變換的過(guò)程,能夠比擬方便的對(duì)前后的圖形特征進(jìn)行比照,從中發(fā)現(xiàn)變換的實(shí)質(zhì)。Step5:判斷演示是否結(jié)束。如果結(jié)束,那么進(jìn)入Step6;否那么返回Setp3,循環(huán)演示。Step6:退出動(dòng)態(tài)演示。曲面1.坐標(biāo)系的建立及轉(zhuǎn)換曲面的坐標(biāo)系與三維變換的坐標(biāo)系的建立方法相同,都是采用的是正等軸測(cè)坐標(biāo)系。曲面的坐標(biāo)系如圖4-7所示,因此,其轉(zhuǎn)變過(guò)程與三維圖形坐標(biāo)系相同,此處不再進(jìn)行詳解。圖4-7曲面的坐標(biāo)系圖4-8Bezier曲面2.曲面的動(dòng)態(tài)演示的實(shí)現(xiàn)曲面的動(dòng)態(tài)演示主要是曲面生成過(guò)程的動(dòng)態(tài)演示。其中算法的動(dòng)態(tài)演示原理和二維圖形的算法文字演示原理一樣,都是通過(guò)定義一個(gè)數(shù)組用來(lái)存放程序的每條執(zhí)行語(yǔ)句,循環(huán)輸出到窗口,從而到達(dá)動(dòng)態(tài)演示的目的。下面本文以Bezier曲面為例來(lái)說(shuō)明曲面的生成過(guò)程的動(dòng)態(tài)演示。從Bezier曲面的算法原理我們可以知道,Bezier曲面可以看作是參數(shù)為u,v的交錯(cuò)的Bezier曲線集,當(dāng)固定u不變,讓v在0和1之間取不同的值,得到一組曲線,稱為v線,反之,可以得到一組u線,由這兩組曲線組成的網(wǎng)稱為參數(shù)曲線網(wǎng)。為了實(shí)現(xiàn)Bezier曲面的可視化,本文通過(guò)選取適宜的u和v的變化量,從而得到了Bezier曲面的參數(shù)曲面網(wǎng),圖4-8所示的是一個(gè)曲面圖。4.4程序運(yùn)行實(shí)例本文實(shí)現(xiàn)了三維圖形中的三維變換(平移、旋轉(zhuǎn)、比例、錯(cuò)切和反射等)和Bezier曲面的算法可視化動(dòng)態(tài)演示,圖4-9到圖4-14是三維變換動(dòng)態(tài)演示區(qū)的局部圖片。這五張圖片分別表示為三維圖形沿Y軸的平移變換、等比例變換、沿Y軸的錯(cuò)切變換、沿X軸的旋轉(zhuǎn)變換以及關(guān)于Y軸和Z軸的反射變換。圖4-13和圖4-14分別為B樣條曲面和Bezier曲面以及其控制多邊形的動(dòng)態(tài)演示。圖4-9沿Y軸的平移變換圖4-10等比例變換圖4-11沿Y軸的錯(cuò)切變換圖4-12沿X軸的旋轉(zhuǎn)變換圖4-13關(guān)于Y軸和Z軸的反射變換圖4-14Bezier曲面以及其控制多邊形5計(jì)算機(jī)圖形學(xué)演示系統(tǒng)的實(shí)現(xiàn)5.1系統(tǒng)的類本系統(tǒng)是在VC++6.0的環(huán)境下開(kāi)發(fā)的,作為可視化面向?qū)ο蟮木幊坦ぞ?,它具有很多?yōu)點(diǎn),不過(guò)缺點(diǎn)是編程比擬困難。本系統(tǒng)的程序是在通過(guò)MFC建立的單文檔(SDI)的根底上編寫的。它會(huì)幫我們自動(dòng)生成程序的主框架,同時(shí)也會(huì)自動(dòng)生成一些文檔視圖結(jié)構(gòu)的類。在程序的編寫過(guò)程中,我們主要編寫了多個(gè)類和結(jié)構(gòu)體。其中最主要的類之間的層次關(guān)系如以下圖所示5-1所示。圖5-l主要類之間的層次關(guān)系CMainFrame類,CGraphicsDemoView類以及CAppView類是本程序中最重要的三個(gè)視圖類,前面兩個(gè)類是系統(tǒng)自動(dòng)添加的,后面兩個(gè)類是自己寫的。CMainFrame類對(duì)應(yīng)主界面中的主體框架圖(包括標(biāo)題欄和狀態(tài)欄等界面的控制),同時(shí)其它兩個(gè)類由它來(lái)調(diào)度和使用,后面兩個(gè)類分別對(duì)應(yīng)圖形生成過(guò)程的動(dòng)態(tài)演示視圖和圖形算法演示的視圖。在CGraphicsDemoView類和CAppView類中它們主要調(diào)用的類有C3DTransform類,CPolygonClipping類,CLinecliping類,CopenGL類和CPoint_for_surface類,這些類分別是用來(lái)為三維變換,多邊形填充,直線裁剪,真實(shí)感圖形和為曲面可視化來(lái)效勞的。另外除了這些類以外,還有其它的一些類和結(jié)構(gòu)體都是用來(lái)為上面的8個(gè)主要的類來(lái)效勞的,它們分別是CGraphicsDemoDoc類,CGraphicsDemoApp類,GL_WindowInit結(jié)構(gòu)體Application結(jié)構(gòu)體和GL_Window結(jié)構(gòu)體。在這些類和結(jié)構(gòu)體中,前三個(gè)是在建立VC的單文檔應(yīng)用程序時(shí)自動(dòng)生成的類,它們的主要作用是生成單文檔程序。最后的四個(gè)結(jié)構(gòu)體主要是用來(lái)為真實(shí)感圖形生成的COpenGL類來(lái)效勞的。5.2類的實(shí)現(xiàn)本系統(tǒng)的實(shí)現(xiàn)實(shí)際上是通過(guò)函數(shù)來(lái)實(shí)現(xiàn)的,而函數(shù)是根據(jù)不同的功能而封裝在不同的類中的,所以我們從不同的類來(lái)討論函數(shù)和系統(tǒng)的實(shí)現(xiàn)。CAppView類CAppView類是用來(lái)實(shí)現(xiàn)算法文字的可視化的,它的功能比擬簡(jiǎn)單,只需要將事先定義好的算法文字根據(jù)演示步驟的不同,選擇適宜的背景顏色輸出到指定的視圖窗口就行了,本系統(tǒng)為了節(jié)省顯示窗口,于是就省略了算法是演示,讓圖形變換演示創(chuàng)造更大的空間。在該類的頭文件中,定義了一系列的圖形的字符串?dāng)?shù)組,這些字符串?dāng)?shù)組在開(kāi)始執(zhí)行可視化之前,就已經(jīng)在源文件中賦好初值了。在這個(gè)類中,最重要的函數(shù)主要是:VoidInitOutputText();這個(gè)函數(shù)的功能也很簡(jiǎn)單。其主要功能是在程序開(kāi)始前將所有的字符串?dāng)?shù)組賦初值。CGrapicsDemoView類CGrpahicsDmeoView類是本系統(tǒng)中最主要的類之一。它定義了大量的變量和函數(shù),其主要功能就是實(shí)現(xiàn)各種圖形生成過(guò)程的動(dòng)態(tài)演示,在這里我們主要討論一下這個(gè)類中的一些所有圖形的動(dòng)態(tài)演示都必須用到的函數(shù)。這些函數(shù)主要有以下幾個(gè):VoidCreateCoordinate(CDC*pDC,intnType);VoidDrawGraphSteP(CDC*pDC,intnType,intnSteP);VoidGetPointPosition(intnType)。從這三個(gè)函數(shù)的參數(shù)可以看出,它們只與當(dāng)前演示的圖形類型和演示的步數(shù)有關(guān),所以它們支持所有的演示類型,這樣以來(lái)可以增加程序的可擴(kuò)展性。其中第一個(gè)函數(shù)用來(lái)在準(zhǔn)備動(dòng)態(tài)演示的時(shí)候繪制坐標(biāo)系。第二個(gè)函數(shù)是在動(dòng)態(tài)演示過(guò)程中調(diào)用的函數(shù),它的第二個(gè)參數(shù)nStpe表示的是當(dāng)前演示過(guò)程中的步數(shù),這意味著動(dòng)態(tài)演示過(guò)程中的每一步都要調(diào)用這個(gè)函數(shù).第三個(gè)函數(shù)是用來(lái)準(zhǔn)備動(dòng)態(tài)演示所使用的數(shù)據(jù)的,它主要包括動(dòng)態(tài)演示過(guò)程中的各種點(diǎn)的坐標(biāo)值。這三個(gè)函數(shù)的調(diào)用順序和流程如圖5-2:判斷演示類型判斷演示類型調(diào)用CreatCoordinate函數(shù)創(chuàng)立坐標(biāo)調(diào)用CreatCoordinate函數(shù)創(chuàng)立坐標(biāo)調(diào)用GetPointPosition函數(shù)得到點(diǎn)的數(shù)組循環(huán)輸出點(diǎn)完成動(dòng)態(tài)演示圖5-2CGraphiesDemoView賈類的實(shí)現(xiàn)流程CMainFrame類CMainFrame類是MFC的單文檔程序自帶的類,它可以用來(lái)定義自己的主界面的顏色,大小等等一系列的根本屬性。這個(gè)類是所有其它類的指揮者,通過(guò)這個(gè)類可以調(diào)用其它所有類的所有函數(shù)和功能;它同樣也是其它類的協(xié)調(diào)者,它可以協(xié)調(diào)其它各類的關(guān)系;最后它還是其它類的通信者,它將當(dāng)前程序執(zhí)行的步數(shù)告訴其它所有的類,從而到達(dá)動(dòng)態(tài)演示步調(diào)的一致性。在前面的章節(jié)中,我們提到過(guò),本系統(tǒng)分為三個(gè)局部來(lái)實(shí)現(xiàn),其中只在演示窗口里只保存了一個(gè)局部。我們通過(guò)菜單控件來(lái)調(diào)用各個(gè)函數(shù)模塊,從而到達(dá)圖形變換演示的效果,這些功能的實(shí)現(xiàn)函數(shù)如下: voidCMainFrame::Ondsp1(){ //TODO:Addyourcommandhandlercodehere WinExec("j:\\計(jì)算機(jī)圖形學(xué)演示系統(tǒng)\\test1.exe",SW_SHOW);//調(diào)用直線剪切工程}voidCMainFrame::Ondisp2(){ //TODO:Addyourcommandhandlercodehere WinExec("j:\\計(jì)算機(jī)圖形學(xué)演示系統(tǒng)\\test2.exe",SW_SHOW);}//調(diào)用多邊形填充工程voidCMainFrame::Ondsp3(){ //TODO:Addyourcommandhandlercodehere WinExec("j:\\計(jì)算機(jī)圖形學(xué)演示系統(tǒng)\\test3.exe",SW_SHOW);}//調(diào)用二維幾何變換工程voidCMainFrame::Ondsp4(){ //TODO:Addyourcommandhandlercodehere WinExec("j:\\計(jì)算機(jī)圖形學(xué)演示系統(tǒng)\\test4.exe",SW_SHOW);}//調(diào)用三維幾何變換工程voidCMainFrame::Ondsp5(){ //TODO:Addyourcommandhandlercodehere WinExec("j:\\計(jì)算機(jī)圖形學(xué)演示系統(tǒng)\\test5.exe",SW_SHOW);}//調(diào)用Bezier曲線變換工程voidCMainFrame::OnDsp6(){ //TODO:Addyourcommandhandlercodehere WinExec("j:\\計(jì)算機(jī)圖形學(xué)演示系統(tǒng)\\test6.exe",SW_SHOW);}//調(diào)用三次B樣條曲線工程voidCMainFrame::OnDsp7(){ //TODO:Addyourcommandhandlercodehere WinExec("j:\\計(jì)算機(jī)圖形學(xué)演示系統(tǒng)\\test7.exe",SW_SHOW);}//調(diào)用雙三次Bezier曲面工程在這個(gè)類中還有幾個(gè)函數(shù)起著重要的作用,它們對(duì)其它幾個(gè)視圖類的調(diào)用使得整個(gè)動(dòng)態(tài)演示的步調(diào)完全一致?,F(xiàn)在我們以直線的可視化為例,并且按照程序的走向來(lái)一一介紹在可視化過(guò)程中用到的主要函數(shù)。可視化的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論