畢業(yè)設(shè)計(jì)畢業(yè)論文繪圖軟件的設(shè)計(jì)_第1頁
畢業(yè)設(shè)計(jì)畢業(yè)論文繪圖軟件的設(shè)計(jì)_第2頁
畢業(yè)設(shè)計(jì)畢業(yè)論文繪圖軟件的設(shè)計(jì)_第3頁
畢業(yè)設(shè)計(jì)畢業(yè)論文繪圖軟件的設(shè)計(jì)_第4頁
畢業(yè)設(shè)計(jì)畢業(yè)論文繪圖軟件的設(shè)計(jì)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、編號本科生畢業(yè)設(shè)計(jì)(論文)題目: 繪圖軟件的設(shè)計(jì) 學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué) 號 學(xué)生姓名 指導(dǎo)教師 二 年 月摘 要隨著多媒體技術(shù)的普及和發(fā)展,繪圖軟件在生活工作中的使用越來越頻繁.現(xiàn)在各類繪圖軟件數(shù)不勝數(shù),但大多要么功能太簡單,不能滿足畫圖需要,要么設(shè)計(jì)太復(fù)雜,功能累贅,缺乏易用性.Windows自帶的畫圖軟件(開始附件畫圖),是一款簡單,易用的畫圖軟件,能滿足一些畫點(diǎn)、畫線、畫矩形、畫圓等的簡單功能.根據(jù)所學(xué)的計(jì)算機(jī)圖形學(xué)的知識,使用Visual Basic 作為開發(fā)工具,設(shè)計(jì)一個畫圖軟件.基本實(shí)現(xiàn)windows系統(tǒng)畫圖軟件的所有功能.可以為左右鍵分別指定顏色,同時使用兩種顏色畫圖.可

2、添加坐標(biāo)軸及刻度,可以繪制簡單函數(shù)曲線,可控制各圖形的精準(zhǔn)位置和尺寸.可以使用純色或多種材質(zhì)使用噴槍或填充圖形.可以實(shí)時截取全屏幕或動態(tài)窗口圖片加以編輯,保存.可以實(shí)現(xiàn)圖形的復(fù)制、剪切、粘貼、刪除,文件的打開和保存.設(shè)計(jì)有快速啟動頁,可打開最近文件,提高效率;多窗口操作,界面美觀,操作方便.關(guān)鍵詞: Visual Basic;隨機(jī)文件讀寫;填充;貝塞爾;BresenhamABSTRACTWith the popularization and development of multimedia technology, the use of drawing software in the life

3、 and work are increasingly frequent.There are numerous of the various types of drawing software, but most of them either function is too simple that can not meet the need of drawing or design is too complex, functional burden, lack of ease of use. Paint software that comes with Windows (Start - Acce

4、ssories - Paint), is a simple, easy-to-use and meets the simple function of the draw point, draw lines, draw a rectangle, circle, etc.According to the knowledge of the computer graphics, using Visual Basic as a development tool to design a drawing software. Basically all the features of the Microsof

5、t Paint will be included in this drawing software. For the left and right arrow keys to specify a color,you can use both color drawing. Can be added to the axis scale, and can draw the curve of the simple function, and you can control the precise location and size of the graph. You can use a solid c

6、olor or a variety of materials to use the gun or filled shapes. You can be capture real-time interception of full-screen or dynamic window picture to edit, save. Graphics to copy, cut, paste, delete, open and save files. The design of the Quick Start page to open the file, increase efficiency; multi

7、-window operation, beautiful interface, easy to operate.Keywords: Visual Basic; Random file read and write; fill; Bezier; Bresenham目 錄第1章 緒論11.1 課題背景11.2 目前現(xiàn)狀11.3 繪圖軟件概述21.3.1 基本介紹21.3.2 語言簡介21.3.3 研究內(nèi)容21.3.4 預(yù)期目標(biāo)2第2章 開發(fā)技術(shù)與環(huán)境介紹32.1 visual bisic32.1.1 VB語言的特點(diǎn)32.1.2 屬性、方法和事件32.1.3 對象與類42.2 開發(fā)環(huán)境介紹4第3章

8、二維圖形生成技術(shù)53.1 直線掃描轉(zhuǎn)換算法53.1.1 直線DDA算法63.1.2 中點(diǎn)畫線算法73.1.3 Bresenham畫線算法83.2 圓的掃描轉(zhuǎn)換算法103.2.1 圓的性質(zhì)103.2.2 中點(diǎn)畫圓算法103.2.3 Bresenham畫圓算法123.3 填充技術(shù)133.3.1 種子填充算法13掃描線填充算法143.4 bezier曲線163.4.1 Bezier曲線的定義163.4.2 Bezier曲線的離散生成18第4章 界面設(shè)計(jì)與編碼194.1 界面設(shè)計(jì)194.1.1 主界面194.1.2 展示屏幕204.1.3 快速啟動頁204.1.4 新建文檔214.1.5 菜單欄預(yù)覽2

9、14.1.6 工具選項(xiàng)欄224.1.7 其他窗體234.2 編碼實(shí)現(xiàn)244.2.1 直線-Bresenham畫線算法244.2.2 畫圓算法254.2.3 貝賽爾曲線284.2.4 填充-掃描線填充算法314.2.5 更新畫布UpdateArea334.2.6 各類編輯操作344.2.7 裁剪394.2.8 圖形的翻轉(zhuǎn)424.2.9 截屏444.2.10 打開保存454.2.11 最近打開記錄-隨機(jī)文件讀寫474.3 成果展示51第5章 結(jié)論與展望555.1結(jié)論555.2不足之處及未來展望55參考文獻(xiàn)56致 謝57第1章 緒論1.1 課題背景視覺是人類最重要的感覺手段,圖形又是視覺的基礎(chǔ),隨著

10、多媒體技術(shù)的普及和發(fā)展,人們對畫面的要求越高,對畫圖工具也提出了更高更全面的要求.對于一個人用戶來說,開發(fā)一個基本的圖形繪制處理系統(tǒng),為用戶提供一些基本的圖形繪制功能,可以方便用戶的使用.圖形和圖像有很大的不同,到目前為止,計(jì)算機(jī)圖形學(xué)和數(shù)字圖像處理還是作為兩門課程分別講授的,計(jì)算機(jī)圖形學(xué)是將點(diǎn)、線、面、等實(shí)體生成物體的模型存放在計(jì)算機(jī)里,并可以進(jìn)行修改、處理、操作和顯示的一門學(xué)科.隨著多媒體技術(shù)的普及和發(fā)展,繪圖軟件在生活工作中的使用越來越頻繁.現(xiàn)在各類繪圖軟件數(shù)不勝數(shù),但大多要么功能太簡單,不能滿足畫圖需要,要么設(shè)計(jì)太復(fù)雜,功能累贅,缺乏易用性.Windows自帶的畫圖軟件(開始附件畫圖)

11、,是一款簡單,易用的畫圖軟件,能滿足一些畫點(diǎn)、畫線、畫矩形、畫圓等的簡單功能.所以,開發(fā)一個繪圖軟件,能滿足大部分用戶的使用需求,方便用戶使用,實(shí)屬必要.該軟件通過微軟的開發(fā)工具Visual Basic結(jié)合計(jì)算機(jī)圖形學(xué)的知識設(shè)計(jì)與開發(fā).計(jì)算機(jī)圖形學(xué)的基本含義是使用計(jì)算機(jī)通過算法和程序在顯示設(shè)備上構(gòu)造出圖形.計(jì)算機(jī)圖形學(xué)中的圖形是指可以用數(shù)學(xué)方法描述的并且需要在計(jì)算機(jī)上顯示的圖形,也就是說,計(jì)算機(jī)圖形學(xué)中的圖形是人們通過計(jì)算機(jī)設(shè)計(jì)和構(gòu)造出來的,不是通過如數(shù)碼相機(jī)或掃描儀等設(shè)備輸入的圖像,所設(shè)計(jì)和構(gòu)造的圖形可以使現(xiàn)實(shí)世界中已經(jīng)存在的物體,也可以是完全虛無的物體.1.2 目前現(xiàn)狀隨著計(jì)算機(jī)科學(xué)技術(shù)的

12、發(fā)展,近30年來,計(jì)算機(jī)圖形學(xué)得到迅猛發(fā)展,人們已經(jīng)可以通過計(jì)算機(jī)高速、有效、真實(shí)地生成圖形,計(jì)算機(jī)圖形學(xué)作為利用計(jì)算機(jī)生成圖形的技術(shù),已經(jīng)越來越廣泛地在各個領(lǐng)域等到了應(yīng)用.計(jì)算機(jī)圖形學(xué)應(yīng)用領(lǐng)域的拓寬和應(yīng)用水平的提高,使得人們越來越重視對計(jì)算機(jī)圖形學(xué)的研究和利用.當(dāng)今,計(jì)算機(jī)圖形學(xué)已經(jīng)成為了計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域的一個重要研究方向,并被廣泛地應(yīng)用于科學(xué)計(jì)算、工程設(shè)計(jì)、醫(yī)藥、工業(yè)、藝術(shù)、娛樂業(yè)、廣告業(yè)、教育與培訓(xùn)、商業(yè)及政府部門等.計(jì)算機(jī)圖形技術(shù)是隨著計(jì)算機(jī)技術(shù)在圖形處理領(lǐng)域中的應(yīng)用而發(fā)展起來的一 門新技術(shù),是伴隨著電子計(jì)算機(jī)及其外圍設(shè)備的發(fā)展而產(chǎn)生的,現(xiàn)已成為計(jì)算機(jī)應(yīng)用科學(xué)中的一個重要分支,在許多

13、行業(yè)中起著越來越大的作用.計(jì)算機(jī)的運(yùn)算能力的提高,圖形處理速度的加快,使得圖形學(xué)的各個研究方向得到充分發(fā)展,大量價(jià)格低、簡單易用的圖形應(yīng)用程序促使具有圖形處理功能的計(jì)算機(jī)進(jìn)入家庭. 圖形學(xué)已廣泛應(yīng)用于計(jì)算機(jī)輔助設(shè)計(jì)與制造、計(jì)算機(jī)動畫、科學(xué)計(jì)算可視化、虛擬現(xiàn)實(shí)、影視娛樂等各個領(lǐng)域.這必然促使計(jì)算機(jī)專業(yè)人員、廣大非計(jì)算機(jī)專業(yè)的應(yīng)用人員,從計(jì)算機(jī)圖形學(xué)的理論高度和計(jì)算機(jī)繪圖的實(shí)用角度來研究和開發(fā)計(jì)算機(jī)圖形的生成技術(shù)及軟件.1.3 繪圖軟件概述1.3.1 基本介紹該繪圖軟件參照Windows系統(tǒng)自帶畫圖,在其基礎(chǔ)上,優(yōu)化界面,添加功能,加以實(shí)現(xiàn),以達(dá)到,功能齊全,界面簡潔,使用方面的目的1.3.2 語

14、言簡介Visual Basic是一種由微軟公司開發(fā)的包含協(xié)助開發(fā)環(huán)境的事件驅(qū)動編程語言.從任何標(biāo)準(zhǔn)來說,VB都是世界上使用人數(shù)最多的語言不僅是盛贊VB的開發(fā)者還是抱怨VB的開發(fā)者的數(shù)量.它源自于BASIC編程語言.VB擁有圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)系統(tǒng),可以輕易的使用DAO、RDO、ADO連接數(shù)據(jù)庫,或者輕松的創(chuàng)建ActiveX控件.程序員可以輕松的使用VB提供的組件快速建立一個應(yīng)用程序通過幾年的發(fā)展,它已成為一種專業(yè)化的開發(fā)語言和環(huán)境.用戶可用Visual Basic快速創(chuàng)建Windows程序,現(xiàn)在還可以編寫企業(yè)水平的客戶端/服務(wù)器程序及強(qiáng)大的數(shù)據(jù)庫應(yīng)用程序.VB會吸

15、引更多的贊譽(yù)和批評,也會繼續(xù)為廣大的用戶和程序員使用.它非常適合用來開發(fā)擁有友好界面的程序(比如針對終端的數(shù)據(jù)),但是不適合開發(fā)其它程序(比如聯(lián)合計(jì)算程序).1.3.3 研究內(nèi)容通過參考現(xiàn)有的各類繪圖軟件(主要參考了Windows畫圖的功能)并詳細(xì)了解繪圖的主要功能及應(yīng)用完成系統(tǒng)的需求分析;根據(jù)需求分析完成系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)圖;根據(jù)系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)圖完成系統(tǒng)的結(jié)構(gòu)設(shè)計(jì),包括系統(tǒng)的界面設(shè)計(jì)以及功能模塊設(shè)計(jì);根據(jù)設(shè)計(jì)文檔,設(shè)計(jì)系統(tǒng)界面,完成各模塊編碼;完成單元測試和系統(tǒng)測試,及功能測試.1.3.4 預(yù)期目標(biāo)軟件預(yù)期完成以下功能:(1) 基本實(shí)現(xiàn)windows系統(tǒng)畫圖軟件的所有功能.(2) 可以為左右鍵分

16、別指定顏色,同時使用兩種顏色畫圖.(3) 具有基本的圖形繪制功能,例如:矩形、圓形、點(diǎn)、線等.(4) 可添加坐標(biāo)軸及刻度,可以繪制簡單貝塞爾曲線,可控制各圖形的精準(zhǔn)位置和尺寸.(5) 可以使用純色或多種材質(zhì)使用噴槍或填充圖形.(6) 對于每一種圖形的繪制,可以選擇不同的顏色,不同的線條.(7) 可以實(shí)時截取全屏幕或動態(tài)窗口圖片加以編輯,保存.(8) 可以實(shí)現(xiàn)圖形的復(fù)制、剪切、粘貼、刪除,文件的打開和存儲.(9) 設(shè)計(jì)有快速啟動頁,可打開最近文件,提高效率;多窗口操作,界面美觀,操作方便.第2章 開發(fā)技術(shù)與環(huán)境介紹2.1 Visual BisicVisual Basic(簡稱VB)是近年來在國內(nèi)

17、外得到迅速推廣應(yīng)用的可視化程序設(shè)計(jì)語言,具有簡單易學(xué),功能強(qiáng)大,軟件費(fèi)用支出低,見效快等特點(diǎn).它提供了開發(fā)Windows應(yīng)用程序最迅速,最簡捷的方法,不但是專業(yè)人員得心應(yīng)手的開發(fā)工具,而且易于被非專業(yè)人員掌握使用.目前,全世界數(shù)以百萬計(jì)的程序設(shè)計(jì)人員正在用Visual Basic開發(fā)各種類型的軟件.2.1.1 VB語言的特點(diǎn)(1) 可視化Visual Basic是可視化的程序設(shè)計(jì)語言,開發(fā)人員只需要按照設(shè)計(jì)要求對屏幕進(jìn)行布局,用集成開發(fā)環(huán)境來直接拖和畫出各個菜單、按鈕、滾動條、窗口等不同類型的對象.(2) 面向?qū)ο笤赩isual Basic中,窗體及控件都稱為對象,有這些對象構(gòu)成了用戶界面,V

18、isual Basic是面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它是將代碼和數(shù)據(jù)結(jié)合在每個對象中,用戶只需要了解每個對象能完成什么任務(wù),不必知道對象是如何工作的,而程序設(shè)計(jì)人員只要編寫實(shí)現(xiàn)程序功能的那部分代碼,這樣大大提高了程序設(shè)計(jì)的效率,但是Visual Basic里面沒有多態(tài)等面向?qū)ο蟮奶匦?,所以有人稱Visual Basic是準(zhǔn)面向?qū)ο蟪绦蛟O(shè)計(jì)語言.(3) 事件驅(qū)動Visual Basic通過事件來執(zhí)行對象的操作,一個對象可能會產(chǎn)生多個事件,每個事件都可以通過一段程序來響應(yīng),而各個事件之間卻不一定有聯(lián)系,這樣的應(yīng)用程序代碼較短,使程序既易于編寫又易于維護(hù).(4) 沿用結(jié)構(gòu)化的程序設(shè)計(jì)的思想Visual

19、Basic具有豐富的數(shù)據(jù)類型,眾多的函數(shù),并采 用了結(jié)構(gòu)化的程序 設(shè) 計(jì)方法,簡單易學(xué).(5) 易學(xué)易用的集成開發(fā)環(huán)境 Visual basic提供了易學(xué)易用的集成開發(fā)環(huán)境,在該開發(fā)環(huán)境中,用戶可設(shè)計(jì)用戶界面,編寫代碼,調(diào)試程序,直至把應(yīng)用程序編譯成可執(zhí)行文件使其直接在windows環(huán)境下運(yùn)行 (6) Visual Basic支持多種數(shù)據(jù)庫的訪問 采用了對象的鏈接與嵌入(OLE,Object linking and embedding)技術(shù)可以很方便的開發(fā)出集聲音、圖像、動畫、子處理、web等對象于一體的應(yīng)用程序.2.1.2 屬性、方法和事件在Visual Basic中,可以通過屬性、方法和事

20、件來說明和衡量一個對象的特征.事件(Event)事件是指發(fā)生在某一對象上的事情.事件又可分為鼠標(biāo)事件和鍵盤事件.例如,在命令按鈕(Command Button)這一對象上可能發(fā)生鼠標(biāo)單擊(Click)、鼠標(biāo)移動(Mouse Move)、鼠標(biāo)按下(Mouse Down)等鼠標(biāo)事件,也可能發(fā)生鍵盤按下(Key Down)等鍵盤事件.總之,事件指明了對象“什么情況下做?”,常用于定義對象發(fā)生某種反映的時機(jī)和條件.方法(Method)方法是用來控制對象的功能及操作的內(nèi)部程序.例如,人具有說話、行走、學(xué)習(xí)、睡覺等功能,在visual Basic中,對象所能提供的這些功能和操作,就稱作“方法”.以窗體為例

21、,它具有顯示(show)或隱藏(hide)的方法.總之,方法指明了對象“能做什么?”,常用于定義對象的功能和操作.屬性(Property)屬性是指用于描述對象的名稱、位置、顏色、字體等特征的一些指標(biāo).可以通過屬性改變對象的特性.有些屬性可以在設(shè)計(jì)時通過屬性窗口來設(shè)置,不用編寫任何代碼;而有些屬性則必須通過編寫代碼,在運(yùn)行程序的同時進(jìn)行設(shè)置.可以在運(yùn)行時讀取和設(shè)置取值的屬性成為讀寫屬性,只能讀取的屬性成為只讀屬性.總之屬性指明了對象“是什么樣的?”,常用于定義對象的外觀.2.1.3 對象與類(1) 對象(object)Visual basic 具有“面向?qū)ο蟆钡奶匦裕琕isual Basic 應(yīng)

22、用種程序的基本單元是對象,用Visual Basic 編程就是用“對象”組裝程序.這種“面向?qū)ο蟆钡木幊谭椒ㄅc傳統(tǒng)的全部用代碼編制程序的方法有很大區(qū)別,就像用集成電路芯片組裝電視機(jī)和用三極管,二極管組裝電視機(jī)的區(qū)別一樣.顯然,“面向?qū)ο蟆钡木幊谭椒ū葌鹘y(tǒng)的編程方法更簡單,更方便,并且編寫出的程序也更加穩(wěn)定.因此,“對象”可以被看做 Visual Basic 程序設(shè)計(jì)的核心. 在 Visual Basic 程序設(shè)計(jì)中,對象中還可以包含頭,手,腿,腳等部位,其中的每個部位又可以單獨(dú)作為作為被研究的對象.在 Visual Basic 程序設(shè)計(jì)中,整個應(yīng)用程序就是一個對象,應(yīng)用程序中又包含著窗體(Fr

23、ame),命令按鈕(Command),菜單(Menu)等對象.(2) 類(Class)在 Visual Basic 中,對象是由類創(chuàng)建的,因此對象可以說是類的具體實(shí)例,這就好比是蛋糕和做蛋糕的模具之間的關(guān)系.各種不同的對象分屬于各種不同的種類.同一類對象可能具有一些不同的特征(或是說同一類對象不一定具有完全相同的特性);具有某些相同的特性的對象,不一定是同一類對象,這就好比是人和猴子雖然都有身高、性別等特征,但二者之間還存在著智商、語言等特性差異,這兩個對象之間的特性相差很多,根本就不能算是同一類對象.而男人和女人,有著性別、生理等方面的差異,但他們絕大部分特性相同,可以算是同一種類.由此,可

24、以歸結(jié)為一句話:同一類對象的絕大部分特性相同.2.2 開發(fā)環(huán)境介紹操作系統(tǒng):Windows XP開發(fā)語言:Visual Basic開發(fā)工具:Microsoft Visual Basic 6.0 中文版第3章 二維圖形生成技術(shù)在顯示器上生成一個圖形,實(shí)質(zhì)上市往顯示器緩存的相應(yīng)單元中填入數(shù)據(jù).將計(jì)算機(jī)中表示的向量圖形在顯示器上顯示的過程稱為圖形的掃描轉(zhuǎn)換俗稱光柵化.圖形掃描轉(zhuǎn)換的關(guān)鍵是尋找合適的算法,利用計(jì)算機(jī)中圖形的向量表示和圖形的數(shù)學(xué)表示,計(jì)算出落在或充分接近圖形的像素,并以此像素的集合近似代替圖形.例如話一條從點(diǎn)(X0,Y0)到點(diǎn)(X1,Y1)的直線,實(shí)質(zhì)上是一個發(fā)現(xiàn)最佳逼近直線的像素序列,

25、并按直線的顏色屬性填入色彩的過程.由于一個復(fù)雜圖形是由許多基本的圖形構(gòu)成的,在一個圖形中,可能包含成千上萬個基本圖形,所以要求進(jìn)行圖形掃描轉(zhuǎn)換時應(yīng)盡可能地高效率、速度快.又由于圖形的掃描轉(zhuǎn)換一般是由硬件直接完成的,因此,所涉及的掃描轉(zhuǎn)換算法,應(yīng)該便于硬件實(shí)現(xiàn).圖形的掃描轉(zhuǎn)換首先需要確定圖形像素的位置,然后再設(shè)置圖形的顏色或其他屬性.3.1 直線掃描轉(zhuǎn)換算法數(shù)學(xué)意義上的直線式指沒有寬度的、由連續(xù)的無數(shù)個點(diǎn)構(gòu)成的集合,因此顯示器只能近似地顯示直線.對直線進(jìn)行掃描轉(zhuǎn)換時,需要在顯示器的有限像素中,確定最佳逼近該直線的一組像素,對這些像素進(jìn)行寫操作,這個過程稱為直線的掃描轉(zhuǎn)換.一下介紹一個像素寬度的3

26、種常用的直線繪制算法,即直線DDA算法,中點(diǎn)畫線算法及Bresenham畫線算法.在介紹這3種常用算法之前,首先介紹直線的直接畫線算法.xOkby圖3-1 直線的表示如圖3-1所示的直線方程為: (3-1)其中k為直線斜率,b為直線與y軸的交點(diǎn).如果已知直線段的兩個端點(diǎn)(x0, y0)和(x1, y1 ),直線也可以用兩點(diǎn)式表示: (3-2)通過兩點(diǎn)式,可以得到直線的斜率是: (3-3)利用直線方程,已知直線兩個端點(diǎn)(x0,y0)和( x1,y1 )的直線段,如給出直線上某一點(diǎn)的x坐標(biāo)值,可以計(jì)算出該點(diǎn)的y值.這就是直線的直接畫圖算法.為了便于計(jì)算機(jī)的計(jì)算,我們讓x坐標(biāo)從x0變化到x1 ,每一

27、步遞增1,這樣可以保證x坐標(biāo)落在對應(yīng)的柵格上,進(jìn)而計(jì)算對應(yīng)的y坐標(biāo),并舍入取整.用這種方法既直觀,又可行,然而效率較低.這是因?yàn)槊坎竭\(yùn)算都需要一個浮點(diǎn)乘法與一個舍入運(yùn)算.直線的浮點(diǎn)運(yùn)算占用大量的計(jì)算機(jī)資源,且運(yùn)算速度慢,所以直線的直接畫線算法沒有實(shí)際的應(yīng)用價(jià)值.3.1.1 直線DDA算法DDA是數(shù)字微分分析式(Digital Differential Analyzer)的縮寫.設(shè)直線段的兩個端點(diǎn)(x0, y0)和(x1, y1),直線掃描轉(zhuǎn)換的最簡單方法是先算出直線的斜率,然后,從直線的起點(diǎn)開始,確定最佳逼近于直線的y坐標(biāo).(xi , yi)(xi +1, yi+k)(xi +1, round

28、(yi+k)(xi ,round(yi) 圖3-2 直線數(shù)值微分示意圖假定端點(diǎn)坐標(biāo)均為整數(shù),表示端點(diǎn)恰在柵格上,讓x從起點(diǎn)變化到終點(diǎn),每步遞增Dx,,利用直線方程可以計(jì)算出對應(yīng)的y坐標(biāo):(3-4)取Dx=1時,有yi+1 = yi + k,即當(dāng)x每遞增1時,y遞增的值是直線斜率k.DDA算法取直線起點(diǎn)( x0, y0 )作為初始坐標(biāo),每一步x遞增1,通過上式計(jì)算出y坐標(biāo),這樣就可以寫出直線掃描轉(zhuǎn)換的數(shù)值微分算法.用直線微分算法繪制的直線如圖3-2. 算法中的變量說明與前面的分析保持一致,算法主體是一個循環(huán),每一次循環(huán)中,變量x 遞增1,y遞增k.注意上述分析和算法僅適用于k1的情形.這種情況下

29、,x每增加1, y最多增加1,從而保證在迭代循環(huán)的過程中,當(dāng)x方向遞增1時,y方向不可能有像素的跳躍.如果直線的端點(diǎn)為(100,100)和(101,200),采用上面的算法將只畫出了兩個像素,顯然不能表示出我們要畫的一條直線.當(dāng)直斜率k的絕對值超過1時,必須把x、y在算法中的地位交換,即循環(huán)變量改為y,y每增加1, x相應(yīng)增加 1/k,算法的實(shí)現(xiàn)可以通過前面的k1情形下的DDA算法改寫.數(shù)值微分算法的本質(zhì),是用數(shù)值方法解微分方程,通過同時對x和y各增加一個小增量,計(jì)算下一步的x、y值.在一個迭代算法中,如果每一步的x、y值是用前一步的值加上一個增量來獲得的,那么,這種算法就稱為增量算法.因此,

30、DDA算法是一個增量算法.增量算法通過循環(huán)簡化了比較復(fù)雜的問題,在圖形學(xué)中有較多的應(yīng)用.DDA方法計(jì)算像素位置,消除了直線方程中的乘法,在x和y方向使用合適的增量來逐步沿直線推出各像素位置,比直接使用直線方程快.但浮點(diǎn)增量誤差的連續(xù)疊加積累會使長線段所計(jì)算的像素位置有所偏離.而且程序中的k與y 必須用浮點(diǎn)數(shù)表示,每一步運(yùn)算必須對y進(jìn)行舍入取整,取整操作和浮點(diǎn)運(yùn)算十分耗時,不利于在硬件中實(shí)現(xiàn).3.1.2 中點(diǎn)畫線算法不失一般性,在對中點(diǎn)畫線法的討論中,假定直線斜率在0、1之間.如圖3-3所示,若直線在x方向上增加一個單位,則在y方向上的增量只能在0、1之間.假設(shè)x坐標(biāo)為xi的與直線最近的像素已經(jīng)

31、決定為P(xi, yi), 則下一個與直線最接近的像素只能是正右方的P1點(diǎn)(xi+1,yi)或右上方P2點(diǎn)(xi+1,yi +1).P2 (xi+1 , yi+1)QMP (xi , yi)P1 (xi+1 , yi)圖3-3中點(diǎn)畫線法中直線與中點(diǎn)、侯選點(diǎn)的關(guān)系以M(xi+1,yi+0.5)表示P1與 P2 的中點(diǎn),用Q表示理想直線與x=xi+1直線的交點(diǎn).很明顯,當(dāng)M在Q的下方,表明P2離直線更近,應(yīng)該取P2 為下一個直線上的點(diǎn); 當(dāng)M在Q的上方, 表明P1離直線更近, 應(yīng)該取P1 為下一個直線上的點(diǎn),如果M與Q重合,可以任取P1、P2中的一點(diǎn).這就是中點(diǎn)畫線的基本思想.中點(diǎn)畫線的算法實(shí)現(xiàn),

32、關(guān)鍵是建立判別式判斷M和Q的位置關(guān)系, 以及如何合理方便地利用增量算法計(jì)算判別式.假設(shè)直線的起點(diǎn)和終點(diǎn)分別是(x0,y0)和(x1,y1),如果直線方程采用隱式方程表示為: (3-5)通過簡單計(jì)算, 直線隱式方程中的a、b、c分別為:由于假定直線斜率在0、1之間, 且x0 <x1, 所以a<0.依據(jù)直線的基本常識, 如果一個點(diǎn)(x,y)在直線的上面,有F(x,y)>0; 如果一個點(diǎn)(x,y)在直線的下面,有F(x,y)<0; 如果一個點(diǎn)(x,y)在直線上,有F(x,y)=0;因此,欲判斷前述Q在M的上方還是下方,只要把M坐標(biāo)代入直線方程構(gòu)造出下面的判別式并判斷它的符號.

33、 (3-6)當(dāng)d0時,M在直線下方(即在Q的下方),應(yīng)取右上方的P2作為下一個像素;當(dāng)d0時, M在直線上方(即在Q的上方),應(yīng)取正右方的P1作為下一個像素;當(dāng)d0時,可以隨便取一個.約定取正右方的P1.為了簡化判別式的計(jì)算, 注意到di是xi和yi的線性函數(shù), 可以采用增量算法.當(dāng)d>0,取正右方像素P1,令再下一個像素的判別式為d1:(3-7)此時表示判別式的增量為a. 當(dāng)d<0,取右上方像素P2,令再下一個像素的判別式(3-8)此時表示判別式的增量為a+b.直線的最左端是端點(diǎn)(x0,y0), 所以d的初始值計(jì)算是:(3-9)上式的推導(dǎo)中考慮到了(x0,y0)在直線上,所以F(

34、x0, y0)=0.在實(shí)際使用中我們只關(guān)心d的符號,又因?yàn)閍、b都是整數(shù),因此在算法實(shí)現(xiàn)中以2d的正負(fù)代替d的正負(fù),這樣可以化簡掉d的初始值中得小數(shù),寫出僅包含整數(shù)運(yùn)算的算法.中點(diǎn)畫線算法中,只包含整數(shù)變量和加法運(yùn)算,不包含浮點(diǎn)數(shù)和乘除法,適合硬件實(shí)現(xiàn).3.1.3 Bresenham畫線算法Bresenham算法是計(jì)算機(jī)圖形學(xué)領(lǐng)域使用最廣泛的直線掃描轉(zhuǎn)換算法,是一個更好的算法.為了說明簡便,仍然假定直線斜率在0到1之間.該方法采用了類似于中點(diǎn)畫線算法的思想,用一個判別式的符號決定下一個像素點(diǎn).算法原理如下:過各行各列像素中心構(gòu)造一組虛擬網(wǎng)格線.按直線從起點(diǎn)到終點(diǎn)的順序計(jì)算直線與各垂直網(wǎng)格線的交

35、點(diǎn),然后確定該列像素中與此交點(diǎn)最近的像素.該算法的在采用增量計(jì)算的同時,對于每一列,只需檢查一個誤差項(xiàng)的符號,就可以確定該列的所求像素.P1 (xi+1 , yi)P (xi , yi)圖3-4 Bresenham算法設(shè)直線方程為: (3-10)假設(shè)已經(jīng)確定的像素為P(xi yi).那么下一個像素如圖3-4所示,可選擇的像素點(diǎn)為 (xi1, yi)和(xi1, yi1) )兩者中的一個,在x=xi1處直線上點(diǎn)y=k(xi1)+b,,該點(diǎn)到點(diǎn)到(xi1, yi)和(xi1, yi1)的距離分別令為d1和d2:兩個距離的差是:若此差值為正,則d1d2,下一個像素點(diǎn)應(yīng)取(xi1, yi1);若此差值

36、為負(fù),d1<d2,下一個像素點(diǎn)應(yīng)取(xi1, yi);若此差值為零,則d ld2,下一個像素點(diǎn)可取兩個像素點(diǎn)中的任意一個.為了簡化,引入一個新的同正負(fù)的判別變量d:因此將上兩式做減法得:注意到當(dāng)di0時,yi+1=yi+1,所以上式可改寫為:當(dāng)di0時,yi+1=yi,所以上式可改寫為: (3-11)確定初始判別量d0.因?yàn)榫€段上第一個像素點(diǎn)可取起點(diǎn)(x0, y0) ,計(jì)算求出 (3-12)歸納后可以得到Bresenham的畫線算法至此,我們用數(shù)學(xué)方法推導(dǎo)了Bresenham算法及判別式的增量遞推算法.實(shí)際上,Bresenham算法還可以根據(jù)直的直線的簡單幾何特性,直接通過對圖形的分析得

37、到算法,大家可以參考其它文獻(xiàn). 3.2 圓的掃描轉(zhuǎn)換算法與直線的掃描轉(zhuǎn)換類似,圓的掃描轉(zhuǎn)換要在光柵網(wǎng)格中挑選出最靠近圓周的像素,為了簡便,這里僅討論位于原點(diǎn),半徑為r的圓的掃描轉(zhuǎn)換.至于圓心不在遠(yuǎn)點(diǎn)的圓,可以先將圓心移到原點(diǎn),然后進(jìn)行掃描轉(zhuǎn)換,最后再將圓心移回到原來位置.3.2.1 圓的性質(zhì)與直線的掃描轉(zhuǎn)換類似,圓的掃描轉(zhuǎn)換要在光柵網(wǎng)格中挑選出最靠近圓周的像素.當(dāng)圓心在圓點(diǎn)時,圓方程為x2+y2=r2,可以得到最直接的掃描轉(zhuǎn)換算法是:令x以單位步長從0增加至r,每步用解出y,再將y舍入到最接近的整數(shù),就可以得到14圓周.這個算法中有乘方和開方運(yùn)算,效率不高.并且在x接近r時,圓周上計(jì)算求得的點(diǎn)

38、間隔較大.也可以讓x以單位步長從0增加至,用同樣的方法計(jì)算y,就可以得到18圓周.圖3-5 八個對稱點(diǎn)畫圓圓心位于原點(diǎn)的圓有四條對稱軸x=0, y=0, x=y和x=-y.若已知圓弧上一點(diǎn)(x, y),可以得到其關(guān)于四條對稱軸的其它7個點(diǎn),他們分別是:(x, -y)、(-x, y)、(-x, -y)、(y, x)、(y, -x)、(-y, x)和(-y, -x).這種性質(zhì)稱為八對稱性.因此,只要掃描轉(zhuǎn)換八分之一圓弧,就可以求出整個圓弧的像素集.如圖3-5.3.2.2 中點(diǎn)畫圓算法我們來討論如何從點(diǎn)(0,R)至的1/8圓周順時針地確定最佳逼近于圓弧的像素序列.假定橫坐標(biāo)為xi的像素中與該圓弧最近

39、者己確定,為P(xi, yi)素只能是正右方點(diǎn)P1(xi +1, yi)和點(diǎn)P(xi+1, yi+1)中兩者之一,如圖3-6所示.構(gòu)造圓函數(shù)為: (3-13)對于圓上的點(diǎn)(x, y),F(xiàn)(x, y)=0;對于圓外的點(diǎn)(x, y), F(x, y)>0;對于圓內(nèi)的點(diǎn)(x, y), F(x, y)<0 .P(xi , yi)MP2(xi +1, yi-1)圖3-6 中點(diǎn)畫圓算法中當(dāng)前像素與下一像素的候選關(guān)系與中點(diǎn)畫線法一樣,構(gòu)造判別式: (3-14)若 則應(yīng)取P1為下一像素,再下一像素的判別式為:(3-15)若, 則應(yīng)取P2為下一像素,而且下一像素的判別式為:(3-16)這里討論的是按

40、順時針方向生成第二個八分圓.則第一個像素是(0,R),判別式d的初始值為: (3-17)現(xiàn)在我們已經(jīng)得到了一個畫圓的增量算法,但考慮到判別式的初值d0中有浮點(diǎn)數(shù)將一直參與算法運(yùn)算.為了將浮點(diǎn)算法化為整數(shù)算法,令ei=di - 0.25代替di.此時,di<0等同于ei<-0.25, di>0等同于ei-0.25. 同時考慮到初始值e0=1-R是整數(shù),且e的每一次迭代變量也為整數(shù),所以ei<-0.25等價(jià)于ei<0;ei-0.25等價(jià)于ei0.歸納中點(diǎn)畫圓算法,判別條件為:如果ei<0,則下以像素應(yīng)取P1, e的增量為2xi+3;如果ei0,則下一像素應(yīng)取P2

41、, e的增量為2xi-2yi+5;將e改寫為d,就可以得到中點(diǎn)畫圓算法:上述算法只包含了整數(shù)運(yùn)算,其中的乘法可以用移位來完成,基本達(dá)到圖形轉(zhuǎn)換掃描的要求.然而算法還有可能進(jìn)一步改進(jìn),提高運(yùn)算效率.在此請注意判別式的增量是x、y的線性函數(shù).3.2.3 Bresenham畫圓算法本節(jié)要介紹的Bresenham畫圓算法是一種最常用的有效算法,為了保持與前幾節(jié)的一致,并不失一般性,同樣假定圓心在原點(diǎn),考慮第一象限的八分之一圓,取(0,R)為起點(diǎn),按順時針方向畫之間的圓弧.圖3-7 Bresenham畫圓算法中候選像素如圖3-7所示,設(shè)Pi(xi, yi)是已經(jīng)選取的一個像素點(diǎn),根據(jù)這段圓的特點(diǎn),可以判

42、定下一個像素將從Hi(xi+1, yi)和Di(xi+1, yi-1)兩點(diǎn)中選取.Bresenham畫圓算法的基本思想是在算法的每一步都選擇距離圓周最近的點(diǎn).因此分別計(jì)算Hi(xi+1, yi)和Di(xi+1, yi-1)到圓周的距離.引入判別式由此判斷di的符號可以選擇像素.如果di0,則應(yīng)選取Di; 如果di0,則應(yīng)選取Hi,由于判別式中涉及絕對值的計(jì)算,效率非常低,因此需要簡化判別式的計(jì)算.分析當(dāng)一個像素被選定后圓的走向,圓的走向有5種如圖(3-8 )的情況,它們分別是:DiPiHi圖3-8 5種圓走向的情況 Hi和Di在圓內(nèi); Hi在圓上,Di在圓內(nèi); Hi在圓外,Di在圓內(nèi); Hi

43、在圓外,Di在圓上; Hi在圓外,Di在圓外;分析情況,因?yàn)镠i在圓外,Di在圓內(nèi),所以(Hi)>0,(Di)<0將判別式改寫為:如果di0 選擇Di; 如果di<0 選擇Hi;分析情況 , 通過圖上分析,應(yīng)選擇Hi.注意到由于情況 表示Hi在圓內(nèi)或在圓上,Di在圓內(nèi),所以,(Hi)0,(Di)>0, 可以將上式作為判別式, 分析情況時的判別條件同樣適用.分析情況 , 通過圖上分析,應(yīng)選擇Di.此時Hi在圓外,Di在圓外或在圓上;所以,(Hi)>0,(Di)0, 同樣滿足判別式的判別條件;所以我們選用 作為整個算法的判別式.下面我們用增量遞推得方法,簡化di的計(jì)算

44、(3-18)如果di<0,應(yīng)選擇Hi,則下一點(diǎn)(xi+1,yi)的判別式是(3-19) 如果di>0,應(yīng)選擇Di,則下一點(diǎn) ( xi+1,yi-1)的判別式是(3-20)對于初值d0, x0=0, y0=R, d0的計(jì)算是:(3-21)到此,我們已經(jīng)得到了完整的基于整數(shù)的Bresenham畫圓算法.3.3 填充技術(shù)在圖形學(xué)的應(yīng)用中,常常需要在指定的區(qū)域內(nèi)填充上某種顏色或圖案,一個封閉區(qū)域確定以后,填充要解決的問題是如何確定填充的像素以及如何高效地填充.3.3.1 種子填充算法區(qū)域的定義有兩種,一種是區(qū)域采用邊界定義,即區(qū)域邊界上所有像素均具有某個特定值,區(qū)域內(nèi)部所有像素均不取這一特

45、定值,而邊界外的像素則可具有與邊界相同的值;另一種是區(qū)域內(nèi)的像素用同一種顏色表示.在許多填充算法中,種子填充法是一種比較直觀簡單的方法,基本的思想是在一個封閉區(qū)域內(nèi)部有一已知像素,由此出發(fā)通過某種方法找到區(qū)域內(nèi)的所有像素.在討論種子填充算法前,先討論區(qū)域的連通性.區(qū)域的連通性是指從區(qū)域上一點(diǎn)出發(fā),通過幾個方向移動的組合,在不越出區(qū)域的前提下,到達(dá)區(qū)域的任意像素.區(qū)域可以分為四向連通區(qū)域和八向連通區(qū)域兩種:四向連通區(qū)域指的是從區(qū)域上一點(diǎn)出發(fā),可通過四個方向,即上、下、左、右移動的組合,到達(dá)區(qū)域的任意像素;八向連通區(qū)域指的是從區(qū)域內(nèi)每一個像素,可通過八個方向,即上、下、左、右、左上、右上、左下、右

46、下這八個方向的移動的組合來到達(dá).圖3-9 左圖為四向連通區(qū)域,右圖為八向連通區(qū)域種子填充法要求被填充區(qū)域是連通的,只有在連通區(qū)域內(nèi),才有可能將區(qū)域內(nèi)的一點(diǎn)擴(kuò)散到區(qū)域內(nèi)的其它像素.種子填充法中允許從四個方向?qū)ふ蚁乱幌袼氐?,稱為四向算法;允許從八個方向探索下一像素的,稱為八向算法.八向算法可以填充八向連通區(qū)域,也可以填充四向連通區(qū)域.但四向算法只能填充四向連通區(qū)域,而不能填充八向連通區(qū)域.如果圖3-9中右邊的是一個八向連通區(qū)域,按四向連通區(qū)域則是兩個分離的區(qū)域,用四向算法可以將兩個區(qū)域填成不同的顏色,而用八向算法會使兩個區(qū)域填上同一顏色.以下我們只討論四向算法.只要把搜索方向從四個改變成八個,即可

47、得到八向算法.簡單的種子填充算法可以采用遞歸算法.遞歸的基本方法是設(shè)種子像素為(x,y)是四向連通區(qū)域內(nèi)的一點(diǎn),old_color為區(qū)域內(nèi)的原有像素的顏色,new_color是要填充的顏色,遞歸填充的過程是如果種子像素是區(qū)域內(nèi)原有顏色old_color,說明該種子像素在區(qū)域內(nèi),則將像素置為被填充顏色new_color,同時將種子像素的上、下、左、右像素當(dāng)作種子遞歸調(diào)用填充遞歸算法;否則說明該像素已被填充,不再處理. 3.3.2掃描線填充算法遞歸算法的原理和程序都很簡單,但由于多次遞歸,費(fèi)時、費(fèi)內(nèi)存,計(jì)算機(jī)的效率將非常低.因此可以使用棧結(jié)構(gòu)來實(shí)現(xiàn)簡單的種子填充算法.算法原理如下:種子像素入棧;當(dāng)

48、棧非空時重復(fù)執(zhí)行如下三步操作:(1) 找頂像素出棧;(2) 將出棧像素置成填充色;(3) 按某一個順序如左、上、右、下檢查與出棧像素相鄰的四個像素,若其中某個像素還是區(qū)域中原有顏色,或不為邊界,則把該像素入棧.如圖3-10所示,像素1到9 是一個區(qū)域,具有同一種顏色.用簡單的種子填充算法對該區(qū)域進(jìn)行填充,如圖3-11表示了像素的入棧和出棧順序和棧的變化.最下面一行表示出棧順序,每一列表示棧的變化情況.從中看到有些像素反復(fù)出現(xiàn),說明它們被重復(fù)入棧,也就重復(fù)出棧時需要判斷后決定是否填充.這一方面降低了算法的效率,另一方面還要求很大的存儲空間以實(shí)現(xiàn)棧結(jié)構(gòu),改進(jìn)的方法是掃描線填充算法,基本思想是在任意

49、一個掃描線與邊界的相交區(qū)間(含若干個連續(xù)像素)中,只取一個種子像素,一次填充操作針對區(qū)域內(nèi)掃描線上連續(xù)的像素.算法原理如下.54312S11698圖3-10 種子填充圖3-11 種子填充(堆棧)種子像素入棧;當(dāng)棧非空時作如下四步操作:(1) 棧頂像素出棧;(2) 沿掃描線對出棧像素的左右像素進(jìn)行填充,直至遇到邊界像素為止,即每出棧一個像素,就對包含該像素的整個區(qū)間進(jìn)行填充;(3) 上述區(qū)間內(nèi)最左、右的像素分別記為xl 和xr ;(4) 在區(qū)間檢查與當(dāng)前掃描線相鄰的上下兩條掃描線的有關(guān)像素是否全為邊界像素或已填充的像素,若存在非邊界,未填充的像素,則把每一區(qū)間的最右像素取作種子像素入棧.3.4

50、Bezier曲線1962年,法國雷諾汽車公司的P.E.Bezier構(gòu)造了一種以逼近為基礎(chǔ)的參數(shù)曲線和曲面的設(shè)計(jì)方法,并用這種方法完成了一種稱為UNISURF的曲線和曲面設(shè)計(jì)系統(tǒng).Bezier方將函數(shù)逼近同幾何表示結(jié)合起來,使得設(shè)計(jì)師在計(jì)算機(jī)上就象使用作圖工具一樣得心應(yīng)手.Bezier曲線的形狀是通過一組多邊折線(特征多邊形)的各頂點(diǎn)唯一地定義出來的.在這組頂點(diǎn)中:(1) 只有第一個頂點(diǎn)和最后一個頂點(diǎn)在曲線上;(2) 其余的頂點(diǎn)則用于定義曲線的導(dǎo)數(shù)、階次和形狀;(3) 第一條邊和最后一條邊則表示了曲線在兩端點(diǎn)處的切線方向.3.4.1 Bezier曲線的定義Bezier曲線是由多項(xiàng)式混合函數(shù)推導(dǎo)出

51、來的,給定空間n+1個點(diǎn)的位置矢量Pi(i=0,1,2,n),則定義一個 n次Bezier參數(shù)曲線,其各點(diǎn)坐標(biāo)的插值公式是:其中,Pi構(gòu)成該Bezier曲線的特征多邊形,BENi,n(t)是n次Bernstein基函數(shù).Bezier曲線如圖3-12所示:P2P2P0P1P3P1P0P3圖3-12 三次Bezier曲線Bernstein基函數(shù)具有如下形式:這里規(guī)定:00=1,0!=1.則t=0時,k=0 ,BENk,n(t)=1,k0 ,BENk,n(t)=0.t=1時,k=n ,BENk,n(t)=1,kn ,BENk,n(t)=0.(1) 一次Bezier曲線(n=1) n=1時,有2個控制

52、點(diǎn)P0和P1,Bezier多項(xiàng)式是一次多項(xiàng)式:一次Bezier曲線是連接起點(diǎn)P0和終點(diǎn)P1的直線段.(2) 二次Bezier曲線(n=2)n=2時,有3個控制點(diǎn)P0、P1和P2,Bezier多項(xiàng)式是二次多項(xiàng)式:二次Bezier曲線是一條拋物線,如下圖所示.P0PmP2P'(1/2)P(1/2)P1 圖3-13 二次Bezier曲線(3) 三次Bezier曲線(n=3) n=3時,有4個控制點(diǎn)P0、P1、P2和P3,Bezier多項(xiàng)式是三次多項(xiàng)式:其中,它們是三次Bezier曲線的基函數(shù),它們均為三次曲線,任何三次Bezier曲線都是這4條曲線的線性組合.由于每個基函數(shù)的參數(shù)t在整個(0

53、,1)的開區(qū)間內(nèi)不為零,使得Bezier曲線不可能對曲線的形狀進(jìn)行局部控制,如果改變?nèi)我豢刂泣c(diǎn)的位置,整個曲線受到影響.將三次Bezier曲線表示為矩陣形式:其中,Mbe是三次Bezier曲線的系數(shù)矩陣,為常數(shù),Gbe是4個控制點(diǎn)的位置矢量.3.4.2 Bezier曲線的離散生成要計(jì)算Bezier曲線上的點(diǎn),可用Bezier曲線方程,但使用de Casteljau提出的遞推算法則要簡單的多.該算法把一個復(fù)雜的幾何計(jì)算問題轉(zhuǎn)化為一系列的線性運(yùn)算,所以計(jì)算穩(wěn)定可靠,具有通用性,易于在計(jì)算機(jī)上實(shí)現(xiàn).下面用幾何作圖的過程來對該算法進(jìn)行說明,如下圖所示.)3/1(30PP=011/30P1P2P3P10

54、P11P12P20P21P圖3-14 幾何作圖法求Bezier曲線已知控制點(diǎn),稱為,構(gòu)成n條邊的控制多邊形.首先依次對控制多邊形進(jìn)行定比分割,分割比例為t:(1-t),得到第一級遞推的中間頂點(diǎn).然后再對這些中間頂點(diǎn)構(gòu)成的控制多邊形進(jìn)行同樣的定比分割,得到第二級遞推的中間頂點(diǎn).如此繼續(xù),直到n次分割得到中間頂點(diǎn),即為所求的Bezier曲線P(t).以上的遞推過程可以用公式表示為:de casteljau算法遞推出的呈直角三角形,對應(yīng)結(jié)果下圖所示.從左向右遞推,最右邊點(diǎn)即為曲線上的點(diǎn). 0P1P2P3P10P11P12P20P21P30P圖3-15 Bezier曲線的遞推過程第4章 界面設(shè)計(jì)與編碼4.1 界面設(shè)計(jì)4.1.1 主界面本程序主窗體采用Visua

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論