《基于GDI》2D圖形軟件開發(fā)方法初探-2D幾何畫板畢業(yè)論文_第1頁
《基于GDI》2D圖形軟件開發(fā)方法初探-2D幾何畫板畢業(yè)論文_第2頁
《基于GDI》2D圖形軟件開發(fā)方法初探-2D幾何畫板畢業(yè)論文_第3頁
《基于GDI》2D圖形軟件開發(fā)方法初探-2D幾何畫板畢業(yè)論文_第4頁
《基于GDI》2D圖形軟件開發(fā)方法初探-2D幾何畫板畢業(yè)論文_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于gdi+2d圖形軟件開發(fā)方法初探2d幾何畫板摘要基于gdi2d圖形軟件開發(fā)方法初探2d幾何畫板,是采用microsoft visual c 2.0為開發(fā)語言,microsoft .net framework 2.0為支撐平臺(tái)開發(fā)的用于研究二維圖形的圖形軟件。2d幾何畫板的開發(fā),主要是研究gdi+技術(shù)在二維圖形軟件中的開發(fā)方法的探索。在該系統(tǒng)中,實(shí)現(xiàn)一些基本的圖形繪制,如點(diǎn)、線、圓的繪制,及一些自定義圖形的繪制,如多邊形,曲線,帶外接圓的三角形的繪制;實(shí)現(xiàn)基本的測(cè)量,如角度的測(cè)量,長(zhǎng)度的測(cè)量,跨度的測(cè)量等;實(shí)現(xiàn)直角坐標(biāo)系函數(shù)軌跡圖形的繪制,要求為輸入一個(gè)函數(shù)表達(dá)式的字符串,然后自動(dòng)繪制出相關(guān)

2、的軌跡圖形;對(duì)繪制結(jié)果實(shí)現(xiàn)序列化,實(shí)現(xiàn)可以重復(fù)操作圖元;圖元的存儲(chǔ)、選取、修改,實(shí)現(xiàn)圖元的動(dòng)態(tài)性,如選中對(duì)象時(shí)可以拖動(dòng),改變大小等。2d幾何畫板除了實(shí)現(xiàn)基本的圖形的繪制外,還實(shí)現(xiàn)了共點(diǎn)運(yùn)動(dòng),可以動(dòng)態(tài)的觀察二維空間中關(guān)聯(lián)對(duì)象的共點(diǎn)運(yùn)動(dòng),當(dāng)某個(gè)對(duì)象的相關(guān)屬性改變時(shí),對(duì)其他關(guān)聯(lián)對(duì)象的影響;還可以精確的定位相關(guān)對(duì)象的相關(guān)屬性,如圓的半徑,曲線的張力等。本論文首先介紹了項(xiàng)目開發(fā)的背景,相關(guān)開發(fā)工具、開發(fā)語言和平臺(tái)的介紹,然后是系統(tǒng)的總體設(shè)計(jì),系統(tǒng)的詳細(xì)設(shè)計(jì),包括窗口界面,圖形繪制模塊,測(cè)量模塊,2d函數(shù)圖形繪制模塊,序列化模塊的設(shè)計(jì)。關(guān)鍵詞:面向?qū)ο?;命名空間;序列化;gdi+;圖元gdi+ based

3、 development of 2d geometers sketchpadabstractgdi+ based development of 2d geometers sketchpad ,as gdi + on a two-dimensional graphics technology in software development methods of exploration, from basic graphics rendering, the sequence of elements of the object and function of two-dimensional imag

4、ing is of great significance. the system has basic graphics rendering, elements of the sequence, two-dimensional mapping function graphics, objects associated elements of movement points for the observation of the dynamic nature of objects.basic elements, including point, line, round, curves, triang

5、les, polygons, rectangular, diamond, and these special elements derived from the basic elements, such as the triangle with circumcircle.key words: object-oriented;naming space; serialization; gdi +;metafile畢業(yè)論文(設(shè)計(jì))原創(chuàng)性聲明本人所呈交的畢業(yè)論文(設(shè)計(jì))是我在導(dǎo)師的指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。據(jù)我所知,除文中已經(jīng)注明引用的內(nèi)容外,本論文(設(shè)計(jì))不包含其他個(gè)人已經(jīng)發(fā)表或撰寫過的

6、研究成果。對(duì)本論文(設(shè)計(jì))的研究做出重要貢獻(xiàn)的個(gè)人和集體,均已在文中作了明確說明并表示謝意。 作者簽名: 日期: 畢業(yè)論文(設(shè)計(jì))授權(quán)使用說明本論文(設(shè)計(jì))作者完全了解*學(xué)院有關(guān)保留、使用畢業(yè)論文(設(shè)計(jì))的規(guī)定,學(xué)校有權(quán)保留論文(設(shè)計(jì))并向相關(guān)部門送交論文(設(shè)計(jì))的電子版和紙質(zhì)版。有權(quán)將論文(設(shè)計(jì))用于非贏利目的的少量復(fù)制并允許論文(設(shè)計(jì))進(jìn)入學(xué)校圖書館被查閱。學(xué)??梢怨颊撐模ㄔO(shè)計(jì))的全部或部分內(nèi)容。保密的論文(設(shè)計(jì))在解密后適用本規(guī)定。 作者簽名: 指導(dǎo)教師簽名: 日期: 日期: 注 意 事 項(xiàng)1.設(shè)計(jì)(論文)的內(nèi)容包括:1)封面(按教務(wù)處制定的標(biāo)準(zhǔn)封面格式制作)2)原創(chuàng)性聲明3)中文摘要

7、(300字左右)、關(guān)鍵詞4)外文摘要、關(guān)鍵詞 5)目次頁(附件不統(tǒng)一編入)6)論文主體部分:引言(或緒論)、正文、結(jié)論7)參考文獻(xiàn)8)致謝9)附錄(對(duì)論文支持必要時(shí))2.論文字?jǐn)?shù)要求:理工類設(shè)計(jì)(論文)正文字?jǐn)?shù)不少于1萬字(不包括圖紙、程序清單等),文科類論文正文字?jǐn)?shù)不少于1.2萬字。3.附件包括:任務(wù)書、開題報(bào)告、外文譯文、譯文原文(復(fù)印件)。4.文字、圖表要求:1)文字通順,語言流暢,書寫字跡工整,打印字體及大小符合要求,無錯(cuò)別字,不準(zhǔn)請(qǐng)他人代寫2)工程設(shè)計(jì)類題目的圖紙,要求部分用尺規(guī)繪制,部分用計(jì)算機(jī)繪制,所有圖紙應(yīng)符合國(guó)家技術(shù)標(biāo)準(zhǔn)規(guī)范。圖表整潔,布局合理,文字注釋必須使用工程字書寫,不

8、準(zhǔn)用徒手畫3)畢業(yè)論文須用a4單面打印,論文50頁以上的雙面打印4)圖表應(yīng)繪制于無格子的頁面上5)軟件工程類課題應(yīng)有程序清單,并提供電子文檔5.裝訂順序1)設(shè)計(jì)(論文)2)附件:按照任務(wù)書、開題報(bào)告、外文譯文、譯文原文(復(fù)印件)次序裝訂3)其它目 錄1引言12開發(fā)背景32.1當(dāng)代信息技術(shù)的發(fā)展現(xiàn)狀32.1.1當(dāng)代信息技術(shù)的發(fā)展32.1.2計(jì)算機(jī)處理能力的發(fā)展32.2 .net框架的簡(jiǎn)介42.2.1 .net框架簡(jiǎn)介42.2.2 .net框架的組成42.2.3.net框架的特性52.2.4 .net的名字空間62.2.5 .net2.0平臺(tái)介紹72.3 c簡(jiǎn)介72.3.1什么是c#72.3.2

9、c#的特點(diǎn)82.3.3 c#的語言特性92.4 gdi+簡(jiǎn)介102.4.1什么是gdi+102.4.2 gdi+的體系結(jié)構(gòu)圖112.4.3 gdi+的構(gòu)成112.4.4 gdi+的新特色123系統(tǒng)總體設(shè)計(jì)153.1系統(tǒng)總體結(jié)構(gòu)153.2系統(tǒng)模塊結(jié)構(gòu)163.3系統(tǒng)類結(jié)構(gòu)163.4系統(tǒng)運(yùn)行環(huán)境193.5規(guī)格說明194系統(tǒng)窗體界面設(shè)計(jì)214.1設(shè)計(jì)原則214.2界面詳細(xì)設(shè)計(jì)215圖形繪制模塊設(shè)計(jì)255.1基類255.2點(diǎn)265.3線段265.4矩形275.5正方形285.6菱形285.7圓295.8任意三角形305.9等腰三角形315.10等邊三角形325.11直角三角形335.12帶外接圓的三角形

10、345.13任意多邊形365.14文字385.15曲線395.16選取406 2d函數(shù)圖形繪制模塊設(shè)計(jì)436.1實(shí)現(xiàn)原理436.2公式分析器436.3繪制圖形467序列化模塊設(shè)計(jì)517.1序列化類型517.1.1 shallow serialization517.1.2 deep serialization517.2持久存儲(chǔ)527.3按值封送527.4基本序列化537.5選擇性序列化547.6自定義序列化557.7序列化過程的步驟577.8版本控制577.9序列化規(guī)則588結(jié) 論59參考文獻(xiàn)61致 謝631引言用gdi+開發(fā)一個(gè)2d幾何畫板,主要實(shí)現(xiàn)一些基本的圖形繪制,如點(diǎn)、線、圓的繪制,及一

11、些自定義圖形的繪制,如多邊形,射線,直線的繪制;實(shí)現(xiàn)基本的測(cè)量,如角度的測(cè)量,長(zhǎng)度的測(cè)量,跨度的測(cè)量等;實(shí)現(xiàn)直角坐標(biāo)系函數(shù)軌跡圖形的繪制,要求為輸入一個(gè)函數(shù)表達(dá)式的字符串,然后自動(dòng)繪制出相關(guān)的軌跡圖形;對(duì)繪制結(jié)果實(shí)現(xiàn)序列化,實(shí)現(xiàn)可以重復(fù)操作圖元;圖元的存儲(chǔ)、選取、修改,實(shí)現(xiàn)圖元的動(dòng)態(tài)性,如選中對(duì)象時(shí)可以拖動(dòng),改變大小等。2開發(fā)背景2.1當(dāng)代信息技術(shù)的發(fā)展現(xiàn)狀2.1.1當(dāng)代信息技術(shù)的發(fā)展以網(wǎng)絡(luò)化、數(shù)字化、多媒化和智能化為代表的現(xiàn)代信息技術(shù),正在改變?nèi)藗儌鹘y(tǒng)的生活、學(xué)習(xí)和工作方式,影響教育的內(nèi)容與方法。當(dāng)代信息技術(shù)的發(fā)展,特別是以internet為核心的網(wǎng)絡(luò)技術(shù)的發(fā)展和應(yīng)用,使整個(gè)社會(huì)步入全新的網(wǎng)

12、絡(luò)經(jīng)濟(jì)時(shí)代,電子商務(wù)作為網(wǎng)絡(luò)經(jīng)濟(jì)的重要載體,己經(jīng)成為信息時(shí)代市場(chǎng)發(fā)展的一個(gè)重要標(biāo)致,發(fā)展電子商務(wù)則成為當(dāng)今世界商務(wù)活動(dòng)的關(guān)鍵推動(dòng)力,同時(shí)電子商務(wù)也是各類組織在結(jié)構(gòu),運(yùn)營(yíng)和管理方面發(fā)生根本變革的催化劑,使得企業(yè)之間的競(jìng)爭(zhēng)規(guī)則和面臨的營(yíng)銷環(huán)境增添了許多新內(nèi)容,隨著電子商務(wù)技術(shù)的日趨完善和電子商務(wù)市場(chǎng)環(huán)境的日趨成熟,電子商務(wù)已經(jīng)成為越來越多的企業(yè)和行業(yè)追求和向往的交易模式.兩大信息技術(shù)成了一個(gè)從工業(yè)文明向信息時(shí)代過渡的重要的技術(shù)杠桿。計(jì)算機(jī)出現(xiàn)以后,還沒有帶來那么大的變化,到計(jì)算機(jī)發(fā)展到多媒體的時(shí)候才發(fā)生了質(zhì)的變化。因?yàn)橛?jì)算機(jī)僅僅是“計(jì)算機(jī)”的時(shí)候,所用的都是計(jì)算機(jī)語言,很難掌握。計(jì)算機(jī)發(fā)展到多媒體

13、了,現(xiàn)在已經(jīng)是超越了單純的計(jì)算機(jī)語言的時(shí)代。多媒體的出現(xiàn)就把文字、聲音、圖像、三維動(dòng)畫全部變成數(shù)字信息,融為一體。多媒體全方位拓展人的觀感,是人的觀感的延伸,容易讓人掌握,所以到了多媒體時(shí)代。當(dāng)多媒體技術(shù)成熟以后,掌握多媒體技術(shù)的人和多媒體計(jì)算機(jī)一起構(gòu)成了信息時(shí)代的新細(xì)胞,信息社會(huì)的新細(xì)胞。多媒體和信息高速公路以想象不到的驚人的速度在改變著我們的工作方式、交流方式、學(xué)習(xí)方式、思維方式、生活方式。信息化的時(shí)代是世界發(fā)展的大趨勢(shì)。整個(gè)世界的發(fā)展趨勢(shì)就是:世界越來越步人信息時(shí)代,國(guó)家越來越走向國(guó)民經(jīng)濟(jì)信息化。2.1.2計(jì)算機(jī)處理能力的發(fā)展自1666年,在英國(guó)samuel morland發(fā)明了一部可以

14、計(jì)算加數(shù)及減數(shù)的機(jī)械計(jì)數(shù)機(jī),到1984年,日本計(jì)算機(jī)產(chǎn)業(yè)著手研制“第五代計(jì)算機(jī)”,計(jì)算機(jī)處理能力已經(jīng)從簡(jiǎn)單的機(jī)械計(jì)數(shù)變成人工智能。第五代計(jì)算機(jī)把信息采集、存儲(chǔ)、處理、通信和人工智能結(jié)合一起具有形式推理、聯(lián)想、學(xué)習(xí)和解釋能力。它的系統(tǒng)結(jié)構(gòu)突破傳統(tǒng)的馮諾依曼機(jī)器的概念,實(shí)現(xiàn)高度的并行處理。2.2 .net框架的簡(jiǎn)介2.2.1 .net框架簡(jiǎn)介.net框架(framework)是一個(gè)開發(fā)、部署和運(yùn)行.net應(yīng)用的環(huán)境,包括了asp.net、公共語言運(yùn)行時(shí)環(huán)境(clr)以及.net 框架類。.net框架的目的是使windows應(yīng)用程序更加可靠并提供給應(yīng)用程序更大程度的安全性,簡(jiǎn)化web應(yīng)用程序和服務(wù)的

15、開發(fā),提供獨(dú)立的一套庫,使其可用于多種語言。2.2.2 .net框架的組成1、公共語言運(yùn)行時(shí)此名稱不能準(zhǔn)確反映它的全部功能。實(shí)際上,公共語言運(yùn)行時(shí)在組件的開發(fā)及運(yùn)行過程中,都扮演著非常重要的角色。在組件運(yùn)行過程中,運(yùn)行時(shí)負(fù)責(zé)管理內(nèi)存分配、啟動(dòng)或刪除線程和進(jìn)程、實(shí)施安全性策略、同時(shí)滿足當(dāng)前組件對(duì)其它組件的需求。在開發(fā)階段,運(yùn)行時(shí)的作用有些變化,與現(xiàn)今的com相比,運(yùn)行時(shí)的自動(dòng)化程度大為提高(比如可自動(dòng)執(zhí)行內(nèi)存管理),因而開發(fā)人員的工作變得非常輕松。尤其是,映射功能將銳減開發(fā)人員將業(yè)務(wù)邏輯程序轉(zhuǎn)化成可復(fù)用組件的代碼編寫量。對(duì)編程語言而言,運(yùn)行時(shí)這個(gè)概念并不新奇,實(shí)際上每種編程語言都有自己的運(yùn)行時(shí)。

16、visual basic開發(fā)系統(tǒng)具有最為明顯的運(yùn)行時(shí)(名為vbrun),visual c+跟visual foxpro、jscript、smalltalk、perl、python和java一樣有一個(gè)運(yùn)行時(shí),即msvcrt。.net框架的關(guān)鍵作用在于,它提供了一個(gè)跨編程語言的統(tǒng)一編程環(huán)境,這也是它能獨(dú)樹一幟的根本原因。 2、統(tǒng)一的編程類.net框架為開發(fā)人員提供了一個(gè)統(tǒng)一、面向?qū)ο蟆哟位⒖蓴U(kuò)展的類庫集(api)?,F(xiàn)今,c+開發(fā)人員使用的是microsoft基類庫,java開發(fā)人員使用的是windows基類庫,而visual basic用戶使用的又是visual basic api集,這些都只

17、是簡(jiǎn)單的一用,而.net框架就統(tǒng)一了微軟當(dāng)前的各種不同類框架。這樣,開發(fā)人員無需學(xué)習(xí)多種框架就能順利編程。遠(yuǎn)不止于此的是,通過創(chuàng)建跨編程語言的公共api集,.net框架可實(shí)現(xiàn)跨語言繼承性、錯(cuò)誤處理功能和調(diào)試功能。3、編程語言.net框架提供了一套有助于創(chuàng)建使用.net框架的代碼的工具,并且提供了可兼容.net的語言,例如c#,vc+,bv.net,jscript.net。 4、活動(dòng)服務(wù)器頁面(asp+)asp+是使用.net框架提供的編程類庫構(gòu)建而成的,它提供了web應(yīng)用程序模型,該模型由一組控件和一個(gè)基本結(jié)構(gòu)組成。有了它,web應(yīng)用程序的構(gòu)建變得非常容易。開發(fā)人員可以直接使用asp+控件集,

18、該控件集封裝了公共的、用于超文本標(biāo)識(shí)語言(html)用戶界面的各種小器件(諸如文本框、下拉菜單等等)。實(shí)際上,這些控件運(yùn)行在 web服務(wù)器上,它們將用戶界面轉(zhuǎn)換成html格式后再發(fā)送給瀏覽器。在服務(wù)器上,控件負(fù)責(zé)將面向?qū)ο蟮木幊棠P吞峁┙oweb開發(fā)人員,這種編程模型能提供面向?qū)ο缶幊碳夹g(shù)的豐富功能。asp+還提供一些基本結(jié)構(gòu)服務(wù)(諸如會(huì)話狀態(tài)管理和進(jìn)程重啟服務(wù)),這些服務(wù)大大減少了開發(fā)人員要編寫的代碼量,并使應(yīng)用程序的可靠性得到大幅度提高。asp+還允許開發(fā)人員將軟件作為一項(xiàng)服務(wù)來提供。通過使用asp+ web服務(wù)功能,asp+開發(fā)人員只需進(jìn)行簡(jiǎn)單的業(yè)務(wù)邏輯編程,而由asp+基本結(jié)構(gòu)負(fù)責(zé)通過簡(jiǎn)

19、單對(duì)象訪問協(xié)議(soap)來提供服務(wù)。從層次結(jié)構(gòu)來看,.net框架又包括5個(gè)主要組成部分,通用語言運(yùn)行環(huán)境、統(tǒng)一的基礎(chǔ)類庫、ado.net、asp.net和通用語言規(guī)范,如圖2.1所示。圖2.1 .net框架支持環(huán)境2.2.3.net框架的特性1、公共語言運(yùn)行時(shí)2、公共類型系統(tǒng).net框架提供了一個(gè)公共的數(shù)據(jù)類型集合。例如,如果你引用了一個(gè)vb.net、c#、j#、delphi (.net)、托管c+或其他任何一種.net語言的字符串,公共類型系統(tǒng)能夠確保你所引用的字符串對(duì)這些不同的語言來說是完全相同的實(shí)體。這是因?yàn)閟tring類型是在.net框架本身中定義的數(shù)據(jù)類型,而不是在語言中定義的數(shù)據(jù)

20、類型。讓數(shù)據(jù)類型的定義與編程語言分離,便能夠創(chuàng)建一個(gè)允許開發(fā)者采用vb.net和c#語言混合編程,且不存在通信問題的編程環(huán)境。3、il(中間語言)通用中間語言(common intermediate language,cil)更常稱為il,所有支持.net框架的語言,在執(zhí)行前都需要通過兩次編譯。首次編譯是從源程序編譯為.net平臺(tái)的pe格式文件(.exe或.dll),即要在clr環(huán)境中執(zhí)行的受控代碼,它由中間語言il和元數(shù)據(jù)組成。受控代碼在執(zhí)行時(shí),需要有時(shí)編譯器再將中間語言代碼轉(zhuǎn)換為目標(biāo)機(jī)器的本地碼才能運(yùn)行。il元數(shù)據(jù)和通用類型系統(tǒng)相結(jié)合,實(shí)現(xiàn)了真正的跨語言集會(huì)。中間語言il可以被看作是.ne

21、t框架上匯編語言,它是與cpu不相關(guān)的指令集。它包含有加載、存儲(chǔ)、初始化和調(diào)用對(duì)象方法的指令,同時(shí)它也有很多常用的指令,如算術(shù)運(yùn)行、邏輯運(yùn)算、流程控制、直接內(nèi)存訪問和異常處理等指令。開發(fā)者可以直接用這些指令編寫代碼,然后通過工具ilasm.exe編譯成為pe格式文件,也可以通過工具ilasm.exe以文本方式來閱讀pe格式文件的il代碼。2.2.4 .net的名字空間在.net中,類型按照名字空間組織,一個(gè)名字空間是一個(gè)邏輯容器,它提供了數(shù)據(jù)類型的名字解析。.net框架中的核心數(shù)據(jù)類型都屬于“system”名字空間。system:此命名空間包含 .net框架類庫中的其他所有命名空間。syste

22、m還包含了clr所使用的核心數(shù)據(jù)類型(core data types,也被其他基于clr的語言所用)。這些類型包括數(shù)種不同的整數(shù)、一種字符串類型,以及其他。關(guān)于二維圖形的名字命名空間主要有以下幾個(gè):system.data:這個(gè)命名空間內(nèi)的類型造就了ado.net。例如connection類用于建立對(duì)數(shù)據(jù)庫管理系統(tǒng)(database management system,dbms)的連接,dataset類的實(shí)例則可用于緩存(cache)和檢視對(duì)dbms執(zhí)行的查詢的結(jié)果。system.collections.generic命名空間包含接口和類定義類的聚集使使用者能創(chuàng)建更強(qiáng)的類型集,并且提供更好的安全

23、性。system.text命名空間包含ascii,unicode, utf-7, and utf-8特性編碼有關(guān)的類,從字節(jié)塊轉(zhuǎn)換到特征塊的抽象基類型。system.drawing命名空間提供了對(duì) gdi+ 基本圖形功能的訪問。system.collections命名空間包含了定義各種實(shí)體集的接口和類,例如目錄、行列、陣列、表格和字典。system.drawing.drawing2d命名空間提供高級(jí)的二維和矢量圖形功能。2.2.5 .net2.0平臺(tái)介紹以.net framework 2.0為基礎(chǔ)的visual studio 2005包括微軟5年來對(duì).net 1.0的所有修正。在1.0中還需花

24、費(fèi)大量時(shí)間編寫代碼的功能,在2.0幾乎不需要再寫代碼或者只需短短幾行代碼就可以完成。更重要的是,.net framework 2.0增添了的不少新類,同時(shí)相當(dāng)多的類被重寫.2.3 c簡(jiǎn)介2.3.1什么是c#c#是一種簡(jiǎn)單、現(xiàn)代、面向?qū)ο蠛皖愋桶踩木幊陶Z言。c#起源于c語言家族,由c+發(fā)展而來,因此c、c+和java的程序員可以很快熟悉這種新的語言。ecma international 和iso/iec已對(duì)c#進(jìn)行了標(biāo)準(zhǔn)化,分別是ecma-334標(biāo)準(zhǔn)和iso/iec23270標(biāo)準(zhǔn)。microsoft.net框架的c#編譯器符合這兩個(gè)標(biāo)準(zhǔn)。c#是一種面向?qū)ο蟮恼Z言,不過c#還進(jìn)一步支持面對(duì)組件的

25、程序設(shè)計(jì)?,F(xiàn)代軟件設(shè)計(jì)越來越以來于自包含和自描述功能包形式的軟件組件。這種組件的關(guān)鍵在于它們提供了使用屬性、方法、和事件的程序設(shè)計(jì)模型:它們具有提供關(guān)于組件的聲明信息的特性;同時(shí),它們還加入了自己的文檔。c#提供了語言構(gòu)件來直接支持這些概念,從而使c#在創(chuàng)建和使用軟件組件方面非常自然。c#的一些特性有助與創(chuàng)建健壯和穩(wěn)定的應(yīng)用程序:垃圾回收可以自動(dòng)回收無用對(duì)象所占用的內(nèi)存;異常處理提供了一種結(jié)構(gòu)化和可擴(kuò)展的錯(cuò)誤檢測(cè)及恢復(fù)方式;語言的類型安全設(shè)計(jì)可以防止引用末初始化變量、數(shù)組下標(biāo)越界,以及執(zhí)行未檢查的類型轉(zhuǎn)換等情形的發(fā)生。c#具有一個(gè)統(tǒng)一的類型系統(tǒng)。所有的c#類型都繼承自單個(gè)根類型object。因

26、此,所有類型都共有一組通用操作,并且任何類型的值都能夠以一致的方式進(jìn)行存儲(chǔ)、傳遞和操作。此外,c#還支持用戶自定義的引用類型和值類型,既允許對(duì)象的動(dòng)態(tài)分配,也允許輕量結(jié)構(gòu)的內(nèi)聯(lián)存儲(chǔ)。為了保證c#程序和類庫總能以兼容的方式升級(jí),在c#的設(shè)計(jì)中十分強(qiáng)調(diào)版本控制。許多程序設(shè)計(jì)語言不太重視這個(gè)問題,這導(dǎo)致了使用那些語言編寫的程序常常因?yàn)槠渌蕾嚨念悗斓母露鵁o法工作。對(duì)版本控制的考慮直接影響了c#的設(shè)計(jì),受影響的方面包括分開的virtual和override修飾符、方法重載的規(guī)則,以及對(duì)顯示接口成員聲明的支持等。2.3.2 c#的特點(diǎn)1、簡(jiǎn)單c#語言設(shè)計(jì)的首要目標(biāo)就是簡(jiǎn)單,這也正是c+的致命缺點(diǎn)。通過

27、舍棄一小部分處理控制能力,增加諸如類型安全、自動(dòng)垃圾收集等新特點(diǎn),來最大限度地使語言最簡(jiǎn)單。2、面向?qū)ο骳#是一種完全面向?qū)ο蟮木幊陶Z言,所有的元素都要被封裝在類中,它支持所有面向?qū)ο笳Z言的關(guān)鍵概念,包括封裝、繼承和多態(tài),但它不再支持類的多繼承,只允許但繼承,即一個(gè)類只能有一個(gè)父親。這是因?yàn)樵诙鄶?shù)情況下,只需要從一個(gè)類的多繼承,從多個(gè)基類派生的會(huì)帶來很多的問題。整個(gè)c#的類模型是建立在.net虛擬對(duì)象系統(tǒng)基礎(chǔ)上的,其對(duì)象模型是.net框架的一個(gè)組成部分,而不再是語言本身的組成部分。因此,用c#編寫的程序能夠最大程度的與.net支持的其他語言相互操作,能夠?qū)崿F(xiàn)跨語言的繼承。3、類型安全類型對(duì)于編

28、程語言是非常重要的,c#實(shí)施了最嚴(yán)格類型安全機(jī)制,有效地增強(qiáng)了程序的可靠性。c#借鑒了很多visual basic語言中增強(qiáng)代碼執(zhí)行可靠性的特點(diǎn),其中包括:所有動(dòng)態(tài)分配的對(duì)象和數(shù)組都被初始化為0;雖然局部變量不會(huì)被自動(dòng)初始化,但如果在程序中不初始化就使用,編譯器會(huì)發(fā)出警告;對(duì)數(shù)組的訪問,會(huì)自動(dòng)進(jìn)行邊界檢查;不能夠?qū)懳捶峙涞膬?nèi)存。4、版本控制c#提供了內(nèi)置的版本支持,開發(fā)者可以使用它來確保開發(fā)的組件升級(jí)時(shí),會(huì)與已有的系統(tǒng)保持二進(jìn)制的兼容。5、靈活與兼容盡管c#代碼在默認(rèn)時(shí)類型安全的,不能使用指針類型,但是在非安全代碼中,仍可以使用指針,并且調(diào)用這些非安全的代碼不會(huì)帶來任何問題。c#不是一個(gè)封閉的

29、語言,它允許通過遵守.net公用語言規(guī)范cls訪問不同的api。2.3.3 c#的語言特性1、類c#中所有代碼和數(shù)據(jù)都必須包含在類中。不能在類的外部定義變量,而且在類的外部不能編寫任何代碼。類可以擁有構(gòu)造函數(shù)(constructor)和(destructor),前者在創(chuàng)建類的某個(gè)對(duì)象時(shí)執(zhí)行,后者在撤消類的某個(gè)對(duì)象時(shí)執(zhí)行。類支持單一繼承性,所有類最終都繼承自稱為object的基類。c#支持版本技術(shù),這有助于在維護(hù)與類前期版本代碼的可兼容性的同時(shí)改進(jìn)類的代碼。c#允許類組合到稱為名字空間的類的集合中。名字空間有它們各自的名稱。并且有助于將類的集合組合到邏輯分組中。2、數(shù)據(jù)類型c#有兩種數(shù)據(jù)類型:值

30、類型和引用類型。值類型的數(shù)據(jù)包含真正的值。引用類型的數(shù)據(jù)包含對(duì)存儲(chǔ)在內(nèi)存中其他地方的值的引用。基本類型都屬于值類型,比如字符類型(char)、整數(shù)類型(int)、浮點(diǎn)類型(float)、枚舉類型和結(jié)構(gòu)類型。引用類型包含處理對(duì)象和數(shù)組的變量。c#有預(yù)定義的引用類型(對(duì)象object和字符串string),也有預(yù)定義的值類型。還可以在代碼中定義自己的值類型和引用類型。最終,所有值類型和引用類型都從稱為object的基類型派生而來。c#允許將一種類型的值轉(zhuǎn)換成另一種類型的值。既可以采用隱式轉(zhuǎn)換又可以采用顯示轉(zhuǎn)換。通常,隱式轉(zhuǎn)換會(huì)成功并且不會(huì)丟失任何信息,顯示轉(zhuǎn)換可能會(huì)導(dǎo)致丟失數(shù)據(jù)。要進(jìn)行顯示轉(zhuǎn)換時(shí),

31、必須在代碼中寫出類型轉(zhuǎn)換運(yùn)算符。3、函數(shù)函數(shù)是可調(diào)用的代碼段,它可能返回也可能不返回值給最初調(diào)用它的代碼。通常,函數(shù)的代碼段會(huì)返回信息,而方法則不返回信息。c#和clr結(jié)合使用可以提供自動(dòng)內(nèi)存管理。c#提供了各種運(yùn)算符用于編寫數(shù)學(xué)表達(dá)式和逐位操作表達(dá)式。c#支持很多語句,這些語句允許在代碼中定義各種執(zhí)行分支。4、變量變量可以被定義為常量。常量的值在整個(gè)代碼執(zhí)行過程中不可以修改。c#為定義和處理事件提供了一種內(nèi)置的機(jī)制。如果編寫了一個(gè)執(zhí)行一長(zhǎng)串操作的類,可能會(huì)希望在操作完成時(shí)啟動(dòng)某個(gè)事件。這時(shí),客戶可以預(yù)約該事件并在代碼中捕獲該事件,這樣當(dāng)完成很長(zhǎng)的操作時(shí),該事件會(huì)通知客戶。c#中的事件處理機(jī)制

32、使用了委托,它們是引用某個(gè)函數(shù)的變量。5、接口c#支持接口(interface),接口是指一套功能的屬性、方法和事件的組合。c#類可以實(shí)現(xiàn)接口,從而告訴用戶類支持接口中指定的功能,可以在不與任何現(xiàn)有代碼抵觸的情況下開發(fā)接口的實(shí)現(xiàn),這樣將最低限度地減小可兼容性的問題。6、屬性屬性向clr聲明有關(guān)類的其他信息,它允許開發(fā)人員在類上綁定信息任何信息。例如,可以使用某個(gè)屬性在類中嵌入文檔編制信息。屬性還可以用于來中綁定運(yùn)行時(shí)信息,定義使用時(shí)應(yīng)該如何采取動(dòng)作。2.4 gdi+簡(jiǎn)介2.4.1什么是gdi+gdi+是windows xp中的一個(gè)子系統(tǒng),它主要負(fù)責(zé)在顯示屏幕和打印設(shè)備輸出有關(guān)信息,它是一組通過

33、c+類實(shí)現(xiàn)的應(yīng)用程序編程接口(api,application programming interface),通過這些api,gdi+讓程序員在設(shè)計(jì)程序時(shí)不必考慮到具體的顯示器或打印機(jī),直接使用由gdi+提供的類的方法便可以在顯示器或打印機(jī)等輸出設(shè)備上進(jìn)行圖形或文本的輸出,真正做到與設(shè)備無關(guān)。顧名思義,gdi+是以前版本gdi的繼承者,出于兼容性考慮,windows xp仍然支持以前版本的gdi,但是在開發(fā)新應(yīng)用程序的時(shí)候,開發(fā)人員為了滿足圖形輸出需要應(yīng)該使用gdi+,因?yàn)間di+對(duì)以前的windows版本中g(shù)di進(jìn)行了優(yōu)化,并添加了許多新的功能。 作為圖形設(shè)備接口的gdi+使得應(yīng)用程序開發(fā)人員

34、在輸出屏幕和打印機(jī)信息的時(shí)候無需考慮具體顯示設(shè)備的細(xì)節(jié),他們只需調(diào)用gdi+庫輸出的類的一些方法即可完成圖形操作,真正的繪圖工作由這些方法交給特定的設(shè)備驅(qū)動(dòng)程序來完成。gdi+使得圖形硬件和應(yīng)用程序相互隔離,從而使開發(fā)人員編寫設(shè)備無關(guān)的應(yīng)用程序變得非常容易。2.4.2 gdi+的體系結(jié)構(gòu)圖gdi+與gdi、directx一樣,都是開發(fā)圖形應(yīng)用程序的一種方式。gdi+實(shí)際就是gdi的高層次的一種封裝類,二著主要用來服務(wù)于圖形、圖象和文本的輸出。惟一不同的是,gdi+在功能上要強(qiáng)大些。另外,二者在編程應(yīng)用上的本質(zhì)區(qū)別是,gdi+用一個(gè)“無狀態(tài)模型”取代了gdi中把選中項(xiàng)目放到設(shè)備環(huán)境(dc,dev

35、ice context)對(duì)象上的“狀態(tài)模型”,在gdi+中每一個(gè)繪圖操作都是相互獨(dú)立的。圖形對(duì)象(graphics object)是繪圖操作中惟一保留的對(duì)象。如圖2.2所示:圖2.2 gdi+體系結(jié)構(gòu)2.4.3 gdi+的構(gòu)成從gdi+所包含的內(nèi)容來看,它主要由以下幾方面構(gòu)成:1、二維幾何圖形的處理矢量圖形由圖元(如直線、曲線和輪廓等)組成,圖元由坐標(biāo)中的一組點(diǎn)來指定。例如,一條直線可用兩個(gè)點(diǎn)來指定,一個(gè)矩形可用一個(gè)給出其左上角位置的點(diǎn)和一對(duì)給出其寬度、高度的數(shù)字來指定。一條簡(jiǎn)單路徑可用由直線或曲線連接起來的一組點(diǎn)來指定。gdi+的rect(矩形)類用與存儲(chǔ)矩形的位置和尺寸;pen類存儲(chǔ)線條顏

36、色、線寬和線條風(fēng)格的信息;graphics類用于繪制直線、矩形及其他圖形;還有幾個(gè)brush類存儲(chǔ)用顏色圖案來填充閉合圖形和路徑的方法。2、顯示圖象 某些圖象難以或不可能使用矢量圖形技術(shù)來表示。例如,工具欄中的按扭圖標(biāo)就很難使用直線和曲線的集合來表示。一幅包含一個(gè)擁擠的棒球場(chǎng)的高分辨率數(shù)字圖象更難用矢量技術(shù)來創(chuàng)建。這種類型的圖象一般都存儲(chǔ)為位圖,位圖是代表屏幕上單個(gè)點(diǎn)的顏色的數(shù)字陣列。用于存儲(chǔ)位圖信息的數(shù)據(jù)結(jié)構(gòu)比用于存儲(chǔ)矢量圖形的數(shù)據(jù)結(jié)構(gòu)更為復(fù)雜。所以在gdi+中就有幾個(gè)類用于處理這些復(fù)雜的位圖信息,cachedbitmap(緩存位圖)類就是一個(gè)例子,該類用于在內(nèi)存中存儲(chǔ)位圖以便快速訪問與顯示

37、位圖。3、排版排版與使用各種各樣的字體、尺寸和風(fēng)格顯示的文本有關(guān)。gdi+為這一復(fù)雜任務(wù)提供了大量的函數(shù)來完成各種不同風(fēng)格的文本輸出。gdi+對(duì)文本的一個(gè)重要支持,就是文本的反鋸齒輸出,這也是gdi+的一個(gè)新特色,該特色使得在lcd屏幕上繪制文本時(shí)文本的外觀更加光滑。2.4.4 gdi+的新特色與傳統(tǒng)的gdi相比,gdi+歸納起來有以下幾方面的新特色。1、漸變的畫刷(gradient brushes) 畫刷是用來填充控件、窗口和區(qū)域的一個(gè)gdi對(duì)象。原有的gdi僅支持單色的畫刷,如果想畫一個(gè)在陽光照耀下的矩形物體,通過gdi的畫刷則不能實(shí)現(xiàn)光線強(qiáng)弱的立體效果。gdi+畫刷改變了這一點(diǎn),gdi+

38、允許用戶創(chuàng)建一個(gè)沿路徑或直線漸變的畫刷,來填充外形(shapes),路徑(paths),區(qū)域(regions),漸變畫刷同樣也可以畫直線、曲線、路徑,當(dāng)你用一個(gè)線形畫刷填充一個(gè)外形(shapes)時(shí),顏色就能夠沿外形逐漸變化。2、基數(shù)樣條函數(shù)(cardinal splines) gdi支持基數(shù)樣條函數(shù),而gdi不支持?;鶖?shù)樣條是一組單個(gè)曲線按照一定的順序連接而成的一條較大曲線。樣條由一系列點(diǎn)指定,并通過每一個(gè)指定的點(diǎn)。由于基數(shù)樣條平滑地穿過組中的每一個(gè)點(diǎn)(不出現(xiàn)尖角),因而它比用直線連接創(chuàng)建的路徑更精確。3、獨(dú)立的路徑對(duì)象(path objects)在gdi中,路徑屬于設(shè)備描述表(dc),在b

39、eginpath函數(shù)和endpath后便被新的路徑信息覆蓋,也就是說gdi的路徑信息是唯一并且不斷改變的。在gdi+中,繪圖工作由圖形對(duì)象(graphics)來完成,并且可以創(chuàng)建多個(gè)圖形對(duì)象進(jìn)行繪圖,多個(gè)圖形對(duì)象產(chǎn)生的路徑信息是相對(duì)獨(dú)立的,而且不會(huì)被新的繪圖操作所覆蓋。你可以創(chuàng)建幾個(gè)與graphics分開的路徑對(duì)象,繪圖操作時(shí)路徑對(duì)象不被破環(huán),這樣你就可以多次使用同一個(gè)路徑對(duì)象畫路徑了。 4、變形和矩陣對(duì)象(transformations matrix object)gdi+提供了矩陣對(duì)象來使圖形在變形(旋轉(zhuǎn)及平移等)時(shí)做到簡(jiǎn)單且效果平滑。矩形對(duì)象存儲(chǔ)了圖形在變化過程中的位置信息。使用矩形除了

40、可以對(duì)坐標(biāo)位置信息進(jìn)行變換以外,還可以對(duì)色彩空間信息進(jìn)行變換。在gdi+中通過矩陣運(yùn)算,可以完成包含投射變換在內(nèi)的所有仿射變換。一個(gè)矩陣對(duì)象總是和一個(gè)圖形變換對(duì)相聯(lián)系起來,比方說,路徑對(duì)象(path)有一個(gè)transform方法,它的一個(gè)參數(shù)能夠接受矩陣對(duì)象的地址,每次路徑繪制時(shí),它能夠根據(jù)變換矩陣?yán)L制。5、alpha通道合成運(yùn)算(alpha blending)alpha blendings 是圖形處理中最常見的一種運(yùn)算方法。在gdi+中,alpha blending不僅運(yùn)用在圖片的合成方面,也體現(xiàn)在畫筆、畫刷與目標(biāo)圖形區(qū)域之間的合成運(yùn)算中,可以在兩幅圖片重疊顯示時(shí),設(shè)置顯示圖片的透明度來合成

41、圖片,真正做到透明。6、多種圖像格式支持 圖像在圖形界面程序中占有舉足輕重的地位,gdi除了支持bmp等gdi支持的圖形格式外,還支持jpeg(joint photographic experts group)、gif(graphics interchange format)、png(exchangeable image file)、tiff(tag image file format)等圖像格式,你可以直接在程序中使用這些圖片文件,而無需考慮它們所用壓縮算法。 gdi+的所有新特色給程序員提供了一種簡(jiǎn)潔的方法來完成在gdi中需要經(jīng)過繁瑣的過程才能完成的編程工作。從某種意義上來說,gdi+是對(duì)

42、使用gdi編程的程序員的一種解脫。3系統(tǒng)總體設(shè)計(jì)3.1系統(tǒng)總體結(jié)構(gòu)基于gdi+2d圖形軟件開發(fā)方法初探2d幾何畫板,主要模塊包括基本圖形繪制、自定義圖形繪制、測(cè)量、2d函數(shù)圖形繪制、序列化及系統(tǒng)功能模塊。繪制的主要圖形對(duì)象包括:點(diǎn)、線段、曲線、圓、矩形、正方形、菱形、任意三角形、等腰三角形、等邊三角形、直角三角形、帶外接圓的三角形、多邊形。系統(tǒng)總體結(jié)構(gòu)和部署示意圖如圖3.1所示:線段、射線、直線、矩形、圓、點(diǎn)正方形、菱 形、三角形、多邊形、曲 線角度、長(zhǎng)度、距離、直角坐標(biāo)系里函數(shù)表達(dá)式的圖形生成基本圖形繪制模塊自定義圖形繪制模塊測(cè)量模塊2d函數(shù)圖形繪制模塊序列化模塊系統(tǒng)功能模塊基于gdi+2d

43、軟件開發(fā)方法初探2d幾何畫板圖3.1 系統(tǒng)總體結(jié)構(gòu)和部署示意圖3.2系統(tǒng)模塊結(jié)構(gòu)系統(tǒng)總體模塊結(jié)構(gòu)描述如表3.1所示:表3.1系統(tǒng)總體模塊結(jié)構(gòu)模塊名稱功能描述基本圖形繪制基本圖形的繪制,如點(diǎn),線段,圓,矩形等自定義圖形繪制自定義圖形的繪制,如菱形,多邊形,帶外接圓的三角形測(cè) 量對(duì)相應(yīng)對(duì)象進(jìn)行測(cè)量,如長(zhǎng)度,距離,角度2d函數(shù)圖形繪制繪制直角坐標(biāo)系函數(shù)表達(dá)式的圖形,可分區(qū)間查看圖形特征序列化對(duì)繪制結(jié)果進(jìn)行序列化,對(duì)對(duì)象可再編輯系統(tǒng)功能提供幫助,操作指南,工具欄,狀態(tài)欄等3.3系統(tǒng)類結(jié)構(gòu)系統(tǒng)類結(jié)構(gòu)如圖3.2所示圖3.2 系統(tǒng)類結(jié)構(gòu)圖類詳細(xì)設(shè)計(jì)如圖3.3所示: (a)基類 (b)點(diǎn) (c)圓 (d)矩形

44、 (e)直線 (f)多邊形 (g)三角形 (h)直角三角形 (i)等邊三角形 (j)三角形(帶外接圓) (k)菱形 (l)等腰三角形 (m)標(biāo)記文字 (n)曲線 (o)正方形圖3.3 類詳細(xì)設(shè)計(jì)3.4系統(tǒng)運(yùn)行環(huán)境(1)運(yùn)行環(huán)境:.net framework 2.0。(2)操作系統(tǒng):windows98、windows2000、windowsxp及以上版本。(3)硬件要求:cpu:pentium (及以上)、內(nèi)存:256mb(建議512mb或以上)。3.5規(guī)格說明(1)顯示圖標(biāo)規(guī)格即桌面顯示的圖標(biāo):30 * 30,單位像素。桌面圖標(biāo)設(shè)計(jì)效果如圖3.4所示:圖3.4 桌面圖標(biāo)(2)圖標(biāo)規(guī)格即工具欄顯

45、示的圖標(biāo):20 * 20,單位像素。工具欄圖標(biāo)設(shè)計(jì)效果如圖3.5所示: (a)選取 (b)點(diǎn) (c)直線 (d)矩形 (e)圓 (f)三角形 (g)標(biāo)記文字 (e)自定義圖3.5 工具欄圖標(biāo)在工具欄圖標(biāo)中,右下角帶黑色小三角的,表示該圖標(biāo)是同一類別圖形的集合,具體說明如表3.2所示:表3.2圖標(biāo)說明 圖標(biāo)名稱說 明選取選取點(diǎn)點(diǎn)直線直線、射線、線段、曲線矩形矩形、正方形、菱形圓圓三角形任意三角形、直角、等腰、等邊、三角形(帶外接圓)標(biāo)記文字標(biāo)記文字自定義六邊形、十二邊形、任意多邊形4系統(tǒng)窗體界面設(shè)計(jì)圖形界面是人機(jī)交互的接口,提供了直觀,方便的操作。在界面設(shè)計(jì)中,應(yīng)遵循美觀、舒適、操作方便、結(jié)構(gòu)合

46、理等要求。4.1設(shè)計(jì)原則在機(jī)算機(jī)軟件技術(shù)中,人機(jī)界面已經(jīng)發(fā)展成為一個(gè)重要的分支?;趃di+2d圖形軟件開發(fā)方法初探2d幾何畫板系統(tǒng)的人機(jī)界面設(shè)計(jì)一般遵循了以下的原則: (1)簡(jiǎn)潔。(2)方便。(3)直觀。4.2界面詳細(xì)設(shè)計(jì)系統(tǒng)的登錄界面圖4.1所示:圖4.1 系統(tǒng)登錄界面登錄界面中顯示一些基本的信息。在設(shè)計(jì)中采用了界面透明技術(shù),使得登錄界面更具視角沖擊。系統(tǒng)的主界面圖4.2所示:繪圖區(qū)快捷欄常用工具欄屬性面板系統(tǒng)狀態(tài)欄屬性控制區(qū)系統(tǒng)菜單欄圖4.2 系統(tǒng)主界面系統(tǒng)菜單欄設(shè)計(jì)如圖4.3所示:圖4.3 系統(tǒng)菜單欄系統(tǒng)菜單欄的詳細(xì)設(shè)計(jì)如圖4.4所示: 圖4.4 系統(tǒng)菜單欄的詳細(xì)設(shè)計(jì)系統(tǒng)快捷欄如圖4.

47、5所示:圖4.5 系統(tǒng)快捷欄系統(tǒng)快捷欄提供了系統(tǒng)功能的快捷操作,可以方便的操作,提高了效率。常用工具欄如圖4.6所示:圖4.6 常用工具欄系統(tǒng)屬性控制區(qū)是對(duì)相應(yīng)對(duì)象的相關(guān)屬性進(jìn)行控制,如圓可以設(shè)置半徑,曲線可以設(shè)置張力,并實(shí)時(shí)的繪制出變化后的圖形。系統(tǒng)屬性控制區(qū)如圖有4.7所示: 圖4.7 屬性控制區(qū)系統(tǒng)屬性面板是相關(guān)對(duì)象屬性的顯示區(qū)域,相關(guān)對(duì)象的屬性在屬性面板中實(shí)時(shí)的顯示出來。系統(tǒng)屬性面板如圖4.8所示:圖4.8 系統(tǒng)屬性面板系統(tǒng)狀態(tài)欄是系統(tǒng)相關(guān)狀態(tài)的顯示區(qū)域,如當(dāng)前鼠標(biāo)的坐標(biāo)位置,當(dāng)前文檔的路徑等信息。系統(tǒng)狀態(tài)欄如圖4.9所示:圖4.9 系統(tǒng)狀態(tài)欄繪圖區(qū)是系統(tǒng)核心區(qū)域,所有圖形的繪制都在此

48、區(qū)域完成。繪圖區(qū)是圖形的繪制區(qū)域,可以繪制圖形并對(duì)圖形對(duì)象進(jìn)行控制、修改、變更等操作。直角坐標(biāo)系二維函數(shù)圖形顯示界面如下:函數(shù)表達(dá)式錄入界面如圖4.10所示:圖4.10 二維函數(shù)表達(dá)式錄入界面函數(shù)表達(dá)式圖形顯示界面如力4.11所示:圖4.11 二維表達(dá)式圖形顯示界面5圖形繪制模塊設(shè)計(jì)圖形繪制模塊主要負(fù)責(zé)系統(tǒng)基本圖形及自定義圖形的繪制,如點(diǎn),線,圓,矩形,曲線,帶外接圓的三角形等?;诿嫦?qū)ο蟮脑O(shè)計(jì)思想,所有圖元對(duì)象都從一個(gè)基類派生,基類定義一些共有的屬性和方法,從它派生的類重寫基類的相應(yīng)方法來實(shí)現(xiàn)各自特有的動(dòng)作。 5.1基類在.net中所有的對(duì)象都從object派生,這也是面向?qū)ο笏枷氲囊环N體

49、現(xiàn)。基類從object對(duì)象派生,其實(shí)現(xiàn)如圖5.1所示:圖5.1 基類從object對(duì)象派生實(shí)現(xiàn)基類中相應(yīng)方法的說明如表5.1所示:表5.1 基類方法說明方法名參數(shù)返回值功能hotpointgraphics,point void繪制關(guān)鍵點(diǎn)atpointpoint, point bool判斷當(dāng)前鼠標(biāo)坐標(biāo)是否落在關(guān)鍵點(diǎn)上atlinepoint,point, pointbool判斷當(dāng)前鼠標(biāo)坐標(biāo)是否落在線上paingraphicsvirtual void由關(guān)鍵點(diǎn)繪制出相應(yīng)的圖形selectatpointvirtual int判斷當(dāng)前選中關(guān)鍵屬性movegraphics,int,poinvirtual v

50、oi移動(dòng)對(duì)象時(shí)發(fā)生的動(dòng)作newpointpointvirtual in新建對(duì)象時(shí)發(fā)生的動(dòng)作addpointpointvirtual int新增一個(gè)關(guān)鍵點(diǎn)hotpointsgraphicsvirtual void選中對(duì)象時(shí)繪制出其關(guān)鍵點(diǎn)drawfocus1graphicsvirtual void當(dāng)焦點(diǎn)落在關(guān)鍵點(diǎn)時(shí)響應(yīng)的動(dòng)作drawfocus0graphicsvirtual void當(dāng)焦點(diǎn)離開關(guān)鍵點(diǎn)時(shí)響應(yīng)的動(dòng)作5.2點(diǎn)點(diǎn)是基本的對(duì)象之一,它由一個(gè)坐標(biāo)確定。如果當(dāng)前繪制類型是點(diǎn)時(shí),按下鼠標(biāo)左鍵時(shí)確定點(diǎn)的坐標(biāo),然后繪制出點(diǎn);當(dāng)繪制類型是選擇時(shí),按下鼠標(biāo)左鍵選中點(diǎn)并按動(dòng)時(shí),可以改變點(diǎn)的坐標(biāo),對(duì)點(diǎn)進(jìn)行移動(dòng)

51、。點(diǎn)的繪制方法如圖5.2所示:圖5.2點(diǎn)繪制方法5.3線段線段是基本的對(duì)象之一,它由關(guān)鍵點(diǎn)確定。如果當(dāng)前繪制類型是線段,按下鼠標(biāo)左鍵時(shí)確定線段的第一個(gè)關(guān)鍵點(diǎn),然后按著鼠標(biāo)左鍵并移動(dòng)鼠標(biāo),當(dāng)釋放鼠標(biāo)左鍵時(shí),確定線段的第二個(gè)關(guān)鍵點(diǎn),然后由二個(gè)關(guān)鍵點(diǎn)確定線段。當(dāng)選中線段時(shí),其二個(gè)關(guān)鍵點(diǎn)會(huì)高亮顯示??梢赃x中其關(guān)鍵點(diǎn)并改變關(guān)鍵點(diǎn)的屬性,也可以選中線段,移動(dòng)線段。線段的繪制方法如圖5.3所示:圖5.3 線段繪制方法移動(dòng)線段的方法如圖5.4所示:圖5.4 移動(dòng)線段方法5.4矩形矩形有四個(gè)關(guān)鍵點(diǎn),在繪制時(shí)只確定左上方和右下方二個(gè)關(guān)鍵點(diǎn)即可,左下方和右上方二個(gè)關(guān)鍵可由左上方和右下方二個(gè)關(guān)鍵點(diǎn)確定。當(dāng)繪制類型是矩

52、形時(shí),按下鼠標(biāo)左鍵時(shí)確定左上方的關(guān)鍵點(diǎn),然后按著鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)繪制矩形,釋放鼠標(biāo)時(shí)確定右下方的關(guān)鍵點(diǎn),完成矩形的繪制。當(dāng)選中矩形時(shí),四個(gè)關(guān)鍵點(diǎn)將會(huì)高亮顯示,可以改變關(guān)鍵點(diǎn)的屬性,也可以選中矩形改變矩形的位置。矩形的繪制方法如圖5.5所示:圖5.5 矩形繪制方法移動(dòng)矩形時(shí)響應(yīng)的方法如圖5.6所示:圖5.6 移動(dòng)矩形響應(yīng)方法5.5正方形正方形是矩形的特例,它的四邊等長(zhǎng)的矩形。正文形類從矩形類派生,與矩形類有相同的屬性,具有四個(gè)關(guān)鍵點(diǎn)。正文形的繪制方法如圖5.7所示:圖5.7正方形繪制方法5.6菱形菱形是矩形的特例,它具有四邊等長(zhǎng)的特性。菱形類從矩形類派生,與矩形類具有相同的屬性,菱形類具有六個(gè)

53、關(guān)鍵點(diǎn),可以改變菱形的大小,也可以改變菱形相應(yīng)角度的大小。菱形的繪制方法如圖5.8所示:圖5.8 菱形繪制方法菱形移動(dòng)響應(yīng)的方法實(shí)現(xiàn)如圖5.9所示:圖5.9 菱形移動(dòng)響應(yīng)方法5.7圓圓具有二個(gè)關(guān)鍵屬性,圓心坐標(biāo)和半徑。當(dāng)繪制類型為圓時(shí),按下鼠標(biāo)左鍵時(shí)取得圓心坐標(biāo),按著鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)時(shí),動(dòng)態(tài)計(jì)算出圓的半徑,釋放鼠標(biāo)時(shí)完成圓的繪制。圓的繪制方法如圖5.10所示:圖5.10 圓繪制方法移動(dòng)圓的響應(yīng)方法實(shí)現(xiàn)如圖5.11所示:圖5.11 移動(dòng)圓響應(yīng)方法判斷點(diǎn)在圓上的方法如圖5.12所示:圖5.12 判斷點(diǎn)在圓上的方法5.8任意三角形三角形是具有三個(gè)頂點(diǎn)三條邊的幾何圖形,在三角形繪制中,只在確定三個(gè)關(guān)

54、鍵點(diǎn)(即三個(gè)頂點(diǎn))就可以繪制出三角形。繪制中是由鼠標(biāo)左鍵按下的來確定三角形的關(guān)鍵點(diǎn)的,因?yàn)槿切斡腥齻€(gè)關(guān)鍵點(diǎn),所以要判斷鼠標(biāo)按下的次數(shù),當(dāng)鼠標(biāo)左鍵第一次按下時(shí),記錄鼠標(biāo)坐標(biāo),并設(shè)置第一個(gè)關(guān)鍵點(diǎn),第二次按下鼠標(biāo)左鍵時(shí),記錄鼠標(biāo)坐標(biāo),設(shè)置第二個(gè)關(guān)鍵點(diǎn),第三次按下鼠標(biāo)左鍵時(shí),記錄鼠標(biāo)坐標(biāo),設(shè)置第三個(gè)關(guān)鍵點(diǎn),當(dāng)三個(gè)關(guān)鍵點(diǎn)都確定時(shí),繪制出相應(yīng)的三角形。在三角形的繪制過程中,可以動(dòng)態(tài)的觀察到三角形的形狀。完成繪制后,也可以改變關(guān)鍵點(diǎn)的屬性,可以選中三角形對(duì)其進(jìn)行移動(dòng)操作。三角形的繪制方法如圖5.13所示:圖5.13 三角形繪制方法繪制三角形時(shí)鼠標(biāo)按下響應(yīng)實(shí)現(xiàn)如圖5.14所示:圖5.14 繪制三角形鼠標(biāo)按下響應(yīng)方法5.9等腰三角形等腰三角形是三角形的特例,是有二邊相等的三角形。等腰三角形類從三角形類派生,在繪制時(shí)利用三角函數(shù)確定二邊相等,即二個(gè)底角相等來實(shí)現(xiàn)等腰三角形。在改變等腰三角形相關(guān)關(guān)鍵點(diǎn)時(shí),其等腰有特性不會(huì)變。在繪制等腰三角形時(shí),按下鼠標(biāo)左鍵時(shí)確定第一個(gè)關(guān)鍵點(diǎn),然后按著鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo),將動(dòng)態(tài)的繪制出等腰三角形,當(dāng)釋放鼠標(biāo)左鍵時(shí),確定第二個(gè)關(guān)鍵點(diǎn),第三個(gè)關(guān)鍵點(diǎn)是根據(jù)另外二個(gè)關(guān)鍵點(diǎn)來動(dòng)態(tài)確定的。等腰三角形的繪制方法如圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論