基于vc++的平面曲線繪制畢業(yè)設計論文_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  學 生 畢 業(yè) 設 計(論 文)</p><p>  2012年 5月30日</p><p> 課題名稱基于VC的平面曲線繪制</p><p> 姓 名</p><p> 學 號</p><p> 院 系信息科學與工程學院</p><p> 專 業(yè)計

2、算機科學與技術</p><p> 指導教師</p><p><b>  目 錄</b></p><p><b>  摘 要:1</b></p><p><b>  關鍵詞:1</b></p><p>  Abstract:2</p>

3、<p>  Key words:2</p><p><b>  1.緒論3</b></p><p>  1.1 本文的主要結(jié)構(gòu)3</p><p>  1.2 研究背景和意義3</p><p>  1.3 研究內(nèi)容4</p><p>  1.4 國內(nèi)外研究現(xiàn)狀4</p&

4、gt;<p>  2.技術背景介紹6</p><p>  2.1計算機圖形學的發(fā)展歷程及應用前景6</p><p>  2.1.1計算機圖形學的發(fā)展簡史6</p><p>  2.1.2計算機圖形學的應用6</p><p>  2.1.2.1計算機輔助設計與制造6</p><p>  2.1.2

5、.2科學計算可視化7</p><p>  2.1.2.3圖形實時繪制與自然景物仿真7</p><p>  2.1.2.4計算機動畫7</p><p>  2.1.2.5計算機藝術8</p><p>  2.1.3計算機圖形學發(fā)展前景8</p><p>  2.2 Visual C++ 6.08</p&

6、gt;<p>  2.2.1 Visual C++ 6.0的簡介8</p><p>  2.2.2 Visual C++ 6.0特色和缺點9</p><p>  3.貝塞爾(Bezier)曲線的繪制9</p><p>  3.1 貝塞爾曲線的介紹9</p><p>  3.2 Bezier曲線的性質(zhì)10</p&g

7、t;<p>  3.3 三次Bezier曲線繪制10</p><p>  4.三次B樣條曲線的繪制12</p><p>  4.1 三次B樣條曲線的介紹12</p><p>  4.2 三次B樣條曲線的性質(zhì)13</p><p>  4.3 三次B樣條曲線的繪制:14</p><p>  4.4

8、程序運行效果圖15</p><p><b>  5.正葉線15</b></p><p>  5.1 正葉線15</p><p>  5.2 正葉線源碼及效果圖16</p><p><b>  結(jié)論18</b></p><p><b>  參考文獻:19&

9、lt;/b></p><p><b>  致謝20</b></p><p>  基于VC的平面曲線繪制</p><p>  摘 要:在我們的生活當中,曲線扮演著十分重要的角色,很多地方我們都需要用到曲線,本論文致力于對曲線的研究,在介紹計算機圖形學算法及原理基礎上,利用Visual C++開發(fā)環(huán)境中數(shù)據(jù)范圍可變時確定坐標軸刻度和繪制平

10、面曲線的方法,根據(jù)提供的圖形數(shù)據(jù)的參數(shù)曲線方程,參數(shù)的幾何意義,最大和最小的參數(shù)值,參數(shù)最合適的取值。利用這些參數(shù)和圖形數(shù)據(jù)繪制出該平面曲線的的圖形,本文將會介紹幾種經(jīng)典的平面曲線,這些曲線在實際的生活中扮演的很重要的角色,很多工程的實現(xiàn)都需要用到這些,本論文將會教會大家怎樣繪制平面曲線。介紹在繪制曲線的過程需要注意哪些關鍵的東西。還會具體的分析該曲線所具有哪些屬于自己的關鍵性質(zhì)。</p><p>  關鍵詞:V

11、isual C++;平面曲線;計算機圖形學。</p><p>  Plane curves based on VC</p><p>  Abstract: Curve plays a significant role in our life and is used by us in a great many of areas, hence the objective of this dis

12、sertation is researching curve. The dissertation based on the introduction of computer graphics calculation and theory, it guarantees the graduation of coordinate axis and method of drawing plane curve through utilizing

13、the changeability of data range in Visual C++ development environment. In addition , it also based on graphics data of parameter of curve equation, geom</p><p>  Key words: Visual C++ , Plane curve, Computer

14、 graphics </p><p><b>  1 緒論</b></p><p>  1.1 本文的主要結(jié)構(gòu)</p><p>  第一部分主要介紹本論文的研究背景和意義、論文主要研究的內(nèi)容、國內(nèi)外最新的研究成果</p><p>  第二部分主要介紹計算機圖形學的發(fā)展史和Visual C++ 6.0的發(fā)展情況</p

15、><p>  第三部分詳細介紹幾種平面曲線及其實現(xiàn)過程</p><p>  1.2 研究背景和意義</p><p>  計算機輔助幾何設計始興于20世紀60年代,最初始于飛機、船舶的外形放樣工藝。在當時計算機發(fā)展的影響下,為了利用計算機更高效地進行設計,人們開始尋找研究曲線或曲面的表示方法,其中最著名、最實用的是法國雷諾汽車公司的工程師提出的Bezier技術[1]和美國

16、機械工程師Coons提出的Coons技術[2,3]。在大多數(shù)情況下,描述產(chǎn)品外形的曲線或曲面只有大概形狀或者只知道它所通過的一系列空間點列,這些點稱為控制點,這類曲線或曲面叫自由曲線或自由曲面,而計算機輔助幾何設計就是研究自由曲線曲面的表示、設計、顯示、分析與綜合以及處理等問題。B樣條曲線是Bezier曲線的改進,對于Bezier曲線來說,特征多邊形頂點個數(shù)決定了Bezier曲線的階次,并且當n較大時,特征多邊形對曲線的控制將會減弱。改

17、變一個控制頂點的位置 會影響整個曲線的形狀,這不利于對曲線的局部修改,且Bezier曲線在很多情況下不能反映特征多邊形的特點。1972~1974年Gorden等將Bezier的基函數(shù)換成B樣條函數(shù),從而構(gòu)造了等距離節(jié)點的B樣條曲線,也稱為均勻B樣條曲線。</p><p>  B樣條曲線的應用范圍非常廣泛,不僅在幾何造型方面,還應用到其它許多方面,如應用B樣條函數(shù)處理力學問題[4],結(jié)合小波方法應用于圖像的完整性認

18、證[5],應用于實驗數(shù)據(jù)的壓縮[6],應用于一維、二維空間中軌跡的規(guī)劃[7]等。B樣條曲線的應用范圍還在不斷的擴大,同時也在不斷的改進,因此對它的研究具有一定的應用價值和推廣價值。</p><p>  B樣條曲線造型方法的理論基礎是B樣條,下面從B樣條的定義和性質(zhì),以及各種B樣條曲線的定義和程序?qū)崿F(xiàn)方法進行闡述。</p><p><b>  1.3 研究內(nèi)容</b>&

19、lt;/p><p>  本論文主要基于VC++程序?qū)崿F(xiàn)對平面曲線的繪制,論文中將會具體提供對下面幾種平面曲線的繪制算法。</p><p>  貝塞爾(Bezier)曲線的繪制</p><p><b>  B樣條曲線的繪制</b></p><p><b>  正葉線繪制</b></p>&l

20、t;p>  1.4 國內(nèi)外研究現(xiàn)狀</p><p>  Bezier曲線的提出是1962最先由貝齊爾開始的,它最初的研究是面向幾何而不是面向代數(shù)。Bezier曲線提出之后在20世紀80年中后期在工業(yè)界和CAGD學術界就產(chǎn)生了極大的影響,并在計算機輔助設計/制造(CAD/CAM)領域中得到了廣泛應用,一直以來都有很多學者對它進行研究。由于它常常應用于不同造型系統(tǒng),而不同造型系統(tǒng)之間經(jīng)常需要進行幾何描述信息的數(shù)

21、據(jù)交換或數(shù)據(jù)集成,因此,降階運算作為Bezier曲線的基本運算就具有非常重要的意義。因而,降階逼近算法的理論研究也就一直成為了研究的熱點。對Bezier曲線的降階問題的研究大致可分為如下兩類:</p><p>  一類是基于控制頂點幾何信息的離散化方法,這類方法主要著眼于原曲線的控制頂點和導矢等幾何信息進行降階。在國外,最早由Forrest于1972年在“Algorithms forrational Bezier

22、 curves”[9]中提出,但是誤差較大;80年代 Farin在“Algorithms forrational Bezier curves”中對有理Bezier曲線、曲面的降階進行了研究[10],Pank的“Degree Reduction of Bezier Curves”等改進了Forrest的方法[11],得到了較好的效果;而Moore和Warren的“Least-Square Approximation to Béz

23、icurvsand Surfaces”[12]通過原曲線與待求曲線所圍面積的極小來反求降階后曲線的控制頂點,給出了一種降階算法;Lodha 和 Warren 的“Degreere Duction of Bezier Simplexes”[13]的算法進一步考慮了一般的Bezier單形A,利用插值和凸組合技巧,先構(gòu)造k個d次的Bezier單形Ak,d<K,使Ak在第k</p><p>  另一類是側(cè)重于基轉(zhuǎn)換

24、的代數(shù)方法,Watkins和Worsey以及Eck利用升階反過程與約束Chebyshev多項式有機地結(jié)合起來,對曲線降階問題進行處理;Eck用約束Legendre多項式在L2范數(shù)空間中進行降階,逼近效果優(yōu)于以往的方法,但多階降階逼近問題采取每次降一階來分次實現(xiàn)。而Lachance則提出了約束Chebyshev多項式的概念,降階逼近曲線端點可保持原曲線的 A 階連續(xù)插值,從而無須通過Lagrange插值來保持端點插值,且此時達到最佳逼近。

25、但 A>0 時,沒有顯式解存在,必須通過諸如修正的Remes算法等數(shù)值方法來。梁秀霞、張彩明、徐琳、張愛武的“L∞范數(shù)下使用基本曲線和修正曲線的帶約束 Bezier 曲線降階”為避免直接求解基于L∞距離的帶約束逼近的非線性最優(yōu)解引起的復雜性,提出了一種把降階逼近曲線分解為基本曲線和修正曲線的降階方法,利用約束Legendre多項式可得到顯式解,且保證降階后曲線要求的邊界插值條件,修正曲線的控制頂點由降階逼近曲線和原曲線的差定義,能

26、夠在L∞范數(shù)意義下極小化降階逼近曲線與原曲線的誤差,文中方法以簡單穩(wěn)定的方式實現(xiàn)保端點插值的一次降多階,并</p><p>  雖然Bezier曲線的降階問題研究得比較多,但都很少有討論采用中點分割與基本降階相結(jié)合并考慮誤差具體進行一次降二階的情況。</p><p><b>  2 技術背景介紹</b></p><p>  2.1計算機圖形學的

27、發(fā)展歷程及應用前景</p><p>  計算機圖形學(ComputerGraphics簡稱CG是一種使用數(shù)學算法將二維或三維圖形轉(zhuǎn)化為計算機顯示器的柵格式的科學。簡單地說,計算機圖形學的主要研究內(nèi)容就是研究如何在計算機中表示圖形、以及利用計算機進行圖形的計算、處理和顯示的相關原理與算法。圖形通常由點、線、面、體等幾何元素和灰度、色彩、線型、線寬等非幾何屬性組成。從處理技術上來看圖形主要分為兩類,一類是基于線條信息

28、表示的,如工程圖等高線地圖、曲面的線框圖等,另一類是明暗圖,也就是通常所說的真實感圖形。經(jīng)過30多年的發(fā)展,計算機圖形學已成為計算機科學中最為活躍的分支之一,并得到廣泛的應用。本文將介紹計算機圖形學的研究內(nèi)容、發(fā)展歷史,應用和圖形學前沿的方向。 </p><p>  2.1.1計算機圖形學的發(fā)展簡史 </p><p>  1950年,第一臺圖形顯示器作為美國麻省理工學院(MIT)旋風號一(

29、Whirlwind)計算機的附件誕生了。該顯示器用一個類似示波的陰極射線管(CRT)來顯示一些簡單的圖形。在整個50年代,只有子管計算機,用機器語言編程,主要應用于科學計算,為這些計算機置的圖形設備僅具有輸出功能。計算機 圖形學處 于準備和醞釀時期并稱之為:“被動式”圖形學。1960年,伊凡?蘇澤蘭在麻省理工學院發(fā)表了名為《畫板》的博士論文,它標志著計算機圖形學的正式誕生。此前的計算機主要是符號處理系統(tǒng),自從有了計算機圖形學,計算機可以

30、部分地表現(xiàn)人的右腦功能了,計算機圖形學的建立意義重大?!?lt;/p><p>  2.1.2計算機圖形學的應用 </p><p>  2.1.2.1計算機輔助設計與制造 </p><p>  CAD/CAM是計算機圖形學在工業(yè)界最廣泛.最活躍的應用領域。計算機圖形學被用來進行土建工程.機械結(jié)構(gòu)和產(chǎn)品的設計,包括設計飛機、汽車、船舶的外形和發(fā)電廠、化工廠等的布局以及電子線

31、路、電子器件等。有時,著眼于產(chǎn)生工程和產(chǎn)品相應結(jié)構(gòu)的精確圖形,然而更常用的是對所設計的系統(tǒng).產(chǎn)品和工程的相關圖形進行人——機交互設計和修改。經(jīng)過反復的選代設計,便可利用結(jié)果數(shù)據(jù)輸出零件表、材料單、加工流程和工藝卡。或者數(shù)據(jù)加工代碼 的指令。在電子工業(yè)中,計算機圖形學應用到集成電路印刷電路板.電子線路和網(wǎng)絡分析等方面的優(yōu)勢十分明顯。CAD領域另一個非常重要的研究領域是基于工程圖紙的三維形體重建。三維形體重建是從二維信息中提取三維信息。通過

32、對 這些信息進行分類。綜合等一系列處理,在三維空間中重新構(gòu)造出二維信息所對應的三維形體,恢復形體的點、線 、面及其拓撲關系,從而實現(xiàn)形體的重建 ?!?lt;/p><p>  2.1.2.2科學計算可視化 </p><p>  目前科學計算可視化廣泛應用于醫(yī)學,流體力學,有限元分析,氣象分析當中。尤其在醫(yī)學領域??梢暬兄鴱V闊的發(fā)展前途。依靠精密機械做腦部手術是目前醫(yī)學上很熱門的課題。而這些技術

33、的實現(xiàn)的基礎則是可視化。當我們做腦部手術時.可視化技術技術將醫(yī)用CT掃描的數(shù)據(jù)轉(zhuǎn)化成圖像.使得醫(yī)生能夠看到并準確的判別病人的體內(nèi)患處.然后通過碰撞檢測一類的技術實現(xiàn)手術效果的反饋,幫助醫(yī)生成功完成手術。我們利用了可視化技術。 </p><p>  2.1.2.3圖形實時繪制與自然景物仿真 </p><p>  重現(xiàn)真實世界的場景叫做真實感繪制。真實感繪制主要是模擬真實物體的物理屬性,簡單的

34、說就是物體的形狀.光學性質(zhì),表面的紋理和粗糙程度,以及物體間的相對位置,遮擋關系等等。在自然景物仿真這項技術中我們需要過行消除隱藏線及面、明暗效應、顏色模型、紋理、光線跟蹤,輻射度等工作。這其中光照和表面屬性是最難摸擬的。而且還必須處理物體表面的明暗效應,以便用不同的色彩灰度來增加圖形的真實感。自然景物仿真在幾何圖形、廣告影視、指揮控制??茖W計算等方面應用范圍很廣 ?!?lt;/p><p>  2.1.2.4計算機動

35、畫 </p><p>  隨著計算機圖形和計算機硬件的不斷發(fā)展,計算機動畫應運而生。事實上動畫也只是生成一幅幅靜態(tài)的圖象,但是每一幅都是對前一幅小部分修改,如何修改便是計算機動畫的研究內(nèi)容,這樣,當這些連續(xù)播放時,整個場景就動起來。早期的計算機動畫靈感來源于傳統(tǒng)的卡通片。在生成幾幅被稱作“關鍵幀”.連續(xù)播放時2個關健幀就被有機的結(jié)合起來了。計算機動畫內(nèi)容豐富多彩,生成動畫的方法也多種多樣.比如基于特征的圖象變形,

36、二維形狀混合,軸變形方法,三維自由形體變形等。近年來人們普遍將注意力轉(zhuǎn)向基于物理模型的計算機動畫生成方法。這是一種嶄新的方法,該方法大量運用彈性力學和流體力學的方程進行計算,力求使動畫過程體現(xiàn)出最適合真實世界的運動規(guī)律。然而要真正到達真實運動是很難的,比如人的行走或跑步,要實現(xiàn)很自然的人走路的畫面,計算機方程非常復雜和計算量極大,基于物理模型的計算機動畫還有許多內(nèi)容需要進一步研究 ?!?lt;/p><p>  2.1

37、.2.5計算機藝術 </p><p>  用計算機從事藝術創(chuàng)作。計算機圖形學除了廣泛用于藝術品的制造,如各種圖案、花紋及傳統(tǒng)的油畫、中國國畫等。還成功的用來制造廣告、動畫片甚至電影,其中有的影片還獲得了奧斯卡獎。這是電影界最高的殊榮。目前國內(nèi)外不少人士正在研制人體模擬系統(tǒng),這使得在不久的將來把歷史上早已去世的著名影視明星重新搬上新的影視片成為可能。這是一個傳統(tǒng)的藝術家無法實現(xiàn)也不可想象的。 </p>

38、<p>  2.1.3計算機圖形學發(fā)展前景 </p><p>  綜觀計算機圖形學的發(fā)展,我們發(fā)現(xiàn)圖形學的發(fā)展迅速.并且已經(jīng)成為一門獨立的學科,傲站在科學的前端。計算機圖形學的已經(jīng)應用到各個領域。比如計算機輔助設計與制造。自然景物仿真和計算機動畫。在我們的生活到處可見,使我們的生活變的絢麗多彩。還有將可視化用于天氣預報。使氣象預報越來越準 確;用于地質(zhì)堪探,使地質(zhì)學家可以發(fā)現(xiàn)新資源;用于醫(yī)學做些精密的

39、手術提高了人們的壽命等??傊嬎銠C圖形學的應用給人類帶來了很多益處。在促進人們物質(zhì)水平提高的同時.也給我們帶來的精神上的享受。</p><p>  2.2 Visual C++ 6.0</p><p>  2.2.1 Visual C++ 6.0的簡介</p><p>  Visual C++ 6.0,簡稱VC或者VC6.0,是微軟推出的一款C++編譯器,將“高級語

40、言”翻譯為“機器語言(低級語言)”的程序。Visual C++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出Visual C++1.0后,隨著其新版本的不斷問世,Visual C++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了 Visual C++.NET(Visual C++7.0),但它的應用有很大的局限性,只適用于Windows 2000、Windows XP和Windows NT4.0。

41、所以實際中,更多的是以Visual C++6.0為平臺。</p><p>  2.2.2 Visual C++ 6.0特色和缺點</p><p>  特色:Visual C++6.0由Microsoft開發(fā), 它不僅是一個C++ 編譯器,而且是一個基于Windows操作系統(tǒng)操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrated development environment,IDE)。Visu

42、al C++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lass Wizard等開發(fā)工具。 這些組件通過一個名為Developer Studio的組件集成為和諧的開發(fā)環(huán)境。Microsoft的主力軟件產(chǎn)品。Visual C++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出Visual C++1.0后,隨著其新版本的不斷問世,Visual C++已成為專業(yè)程序員進行軟件開發(fā)的

43、首選工具。雖然微軟公司推出了Visual C++.NET(Visual C++7.0),但它的應用的很大的局限性,只適用于Windows 2000,Windows XP和Windows NT4.0。所以實際中,更多的是以Visual C++6.0為平臺。</p><p>  Visual C++6.0以擁有“語法高亮”,自動編譯功能以及高級除錯功能而著稱。比如,它允許用戶進行遠程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)

44、試期間重新編譯被修改的代碼,而不必重新啟動正在調(diào)試的程序。其編譯及創(chuàng)建預編譯頭文件(satafx.ch)、最小重建功能及累加連結(jié)(link)著稱。這些特征明顯縮短程序編輯、編譯及連結(jié)的時間花費,在大型軟件計劃上尤其顯著。</p><p>  缺點:由于C++是由C語言發(fā)展起來的,也支持C語言的編譯。6.0版本是使用最多的版本,很經(jīng)典。最大的缺點是對于模版的支持比較差?,F(xiàn)在最新補丁為SP6,推薦安裝,否則易出現(xiàn)編譯

45、時假死狀態(tài)。僅支持Windows操作系統(tǒng)。目前發(fā)現(xiàn)與windows 7兼容性不好,安裝成功后可能會出現(xiàn)無法打開cpp文件的現(xiàn)象。</p><p>  3 貝塞爾(Bezier)曲線的繪制</p><p>  3.1 貝塞爾曲線的介紹</p><p>  一般地說,可以用任何數(shù)目的控制點擬合出一條Bezier曲線,但這需要計算更高次的多項式。復雜曲線可以由一些較低次數(shù)

46、的Bezier曲線段連接而成,較小的曲線段連接也便于更好地控制小區(qū)域內(nèi)的曲線形狀,最常使用的是三次Bezier曲線。</p><p>  三次Bezier曲線由四個控制點P0、P1、P2、P3定義:</p><p>  其中,Pk為特征多邊形第k個頂點的坐標值(xk,yk,zk),而基函數(shù)Bk,n(u)的定義如下</p><p>  (k﹦0,1,...,n)<

47、;/p><p>  函數(shù)Bk,n(u)稱為Bernstein多項式,其中</p><p><b>  為組合公式。</b></p><p>  u的取值范圍為[0,1],n是多項式次數(shù), 也是曲線次數(shù)。</p><p>  三次Bezier曲線寫成坐標分量的形式如下:</p><p>  x(u)﹦(

48、-u3﹢3u2﹣3u﹢1)x0﹢(3u3﹣6u2﹢3u)x1﹢(-3u3﹢3u2)x2﹢u3x3</p><p>  y(u)﹦(-u3﹢3u2﹣3u﹢1)y0﹢(3u3﹣6u2﹢3u)y1﹢(-3u3﹢3u2)y2﹢u3y3</p><p>  z(u)﹦(-u3﹢3u2﹣3u﹢1)z0﹢(3u3﹣6u2﹢3u)z1﹢(-3u3﹢3u2)z2﹢u3z3 </p><p

49、>  實際生成曲線時,取一合適的步長,控制u從0到1變化,求出一系列(x, y)坐標點,將其用小線段順序連接起來,就可以得到一條Bezier曲線。</p><p>  3.2 Bezier曲線的性質(zhì)</p><p> ?。?)曲線的起點和終點同特征多邊形的起點和終點重合</p><p>  (2)Bezier曲線在端點處的一階導數(shù)只同相近的兩個控制點有關,其方

50、向相同于兩點的連線方向。</p><p> ?。?)凸包性:Bezier曲線落在特征多邊形頂點所形成的凸包內(nèi)。</p><p> ?。?)幾何不變性:曲線的形狀由特征多邊形的頂點唯一確定,與坐標系的選取無關。</p><p>  3.3 三次Bezier曲線繪制</p><p>  void CMyView::OnDraw3bezier()

51、</p><p><b>  {</b></p><p>  RedrawWindow();</p><p>  float coeff_x[4];</p><p>  float coeff_y[4];</p><p>  float points_x[nPoints+1];</p>

52、<p>  float points_y[nPoints+1];</p><p>  int degree,i,j;</p><p><b>  degree=3;</b></p><p>  CClientDC *pdc=new CClientDC(this);</p><p><b>  CP

53、en pen;</b></p><p>  pen.CreatePen(PS_SOLID,1,RGB(0,0XFF,0));</p><p>  CPen *oldpen=(CPen*)pdc->SelectObject(&pen);</p><p>  pdc->TextOut(200,150,"三次Bezier曲線&qu

54、ot;);</p><p>  double delt;</p><p>  coeff_x[0]=10;</p><p>  coeff_x[1]=30;</p><p>  coeff_x[2]=40;</p><p>  coeff_x[3]=40;</p><p>  coeff_y[0

55、]=10;</p><p>  coeff_y[1]=5;</p><p>  coeff_y[2]=13;</p><p>  coeff_y[3]=30;</p><p>  pdc->MoveTo(110,110);</p><p>  for(j=0;j<=degree;j++)</p>

56、<p>  pdc->LineTo(10+10*coeff_x[j],10+10*coeff_y[j]); </p><p>  delt=float(1.0/nPoints);</p><p>  double t=0.0;</p><p>  pdc->MoveTo(110,110);</p><p>  f

57、or(i=0;i<=nPoints;i++){</p><p>  points_x[i]=ThreeBezier(degree,coeff_x,t);</p><p>  points_y[i]=ThreeBezier(degree,coeff_y,t);</p><p><b>  t=t+delt;</b></p>&

58、lt;p>  pdc->LineTo(10+10*points_x[i],10+10*points_y[i]);</p><p><b>  }</b></p><p>  delete pdc;</p><p><b>  }</b></p><p><b>  程序運行效果

59、圖:</b></p><p>  圖3.2.1三次Bezier曲線</p><p>  4 三次B樣條曲線的繪制</p><p>  4.1 三次B樣條曲線的介紹</p><p>  工程上常用的是三次B樣條曲線函數(shù)式為:</p><p><b>  u[0, 1]</b></p

60、><p><b>  其中:</b></p><p><b>  展開有:</b></p><p>  F0,3(u)﹦(-u3﹢3u2﹣3u﹢1 )/6;</p><p>  F1,3(u)﹦(3u3﹣6u2﹢4)/6;</p><p>  F2,3(u)﹦(-3u3﹢3u2﹢

61、3u﹢1 )/6;</p><p>  F3,3(u)﹦u3 /6。</p><p>  寫成坐標分量的形式如下:</p><p>  x(u)﹦(-u3/6﹢u2/2﹣u/2﹢1/6)x0﹢(u3/2 ﹣u2﹢2/3)x1﹢(-u3/2﹢u2/2﹢u/2﹢1/6)x2﹢u3x3/6</p><p>  y(u)﹦(-u3/6﹢u2/2﹣u/

62、2﹢1/6)y0﹢(u3/2 ﹣u2﹢2/3)y1﹢(-u3/2﹢u2/2﹢u/2﹢1/6)y2﹢u3y3/6</p><p>  z(u)﹦(-u3/6﹢u2/2﹣u/2﹢1/6)z0﹢(u3/2 ﹣u2﹢2/3)z1﹢(-u3/2﹢u2/2﹢u/2﹢1/6)z2﹢u3z3/6</p><p>  當u從0到1變化時,曲線將在P0到P3之間順序地連續(xù)形成。</p><

63、p>  4.2 三次B樣條曲線的性質(zhì)</p><p> ?。?)嚴格的凸包性:曲線嚴格位于控制多邊形的凸包內(nèi),如果u∈[ ui ,ui+1),</p><p>  p≤i<m-p-1,C(u)位于控制頂點Pi-p….,Pi所建立的凸包內(nèi),如圖4.2.1所示。</p><p><b>  圖4.2.1</b></p>&

64、lt;p> ?。?)分段參數(shù)多項式:C(u)在每一個區(qū)間u∈[ui,ui+1)上都是次數(shù)不高于P的多項式。</p><p> ?。?)可微性或連續(xù)性:C(u)在每一個曲線段內(nèi)部是無限次可微的,在定義域內(nèi)</p><p>  重復度為k的節(jié)點處則使 p-k次可微或具有p-k階參數(shù)連續(xù)性。</p><p> ?。?)幾何不變性:B樣條曲線的形狀和位置與坐標系的選取

65、無關。</p><p> ?。?)局部可調(diào)性:因為Ni, p(u)只在區(qū)間[ui ,ui+p+1)中為正,在其它地方均取零值,所以p次的B樣條曲線在修改時只被相鄰的p+1個頂點控制,而與其它頂點無關。當移動其中的一個頂點p i時,只影響到定義在區(qū)間[ u i ,ui+p+1)上那部分曲線,并不對整條曲線產(chǎn)生影響。</p><p> ?。?)控制多邊形是B樣條曲線的線性近似,若進行節(jié)點插入或

66、升階會更加近</p><p>  似;次數(shù)越低,B樣條曲線越逼近控制頂點</p><p> ?。?)如圖4.2.2所示,設P0 , P1,...,Pn為B樣條曲線的控制多邊形,某平面與B樣條曲線的交點個數(shù)不多于該平面與其控制多邊形的交點個數(shù)</p><p><b>  圖4.2.2</b></p><p>  4.3 三

67、次B樣條曲線的繪制:</p><p>  畫出三次B樣條曲線曲線。</p><p><b>  部分源代碼:</b></p><p>  void CMyView::OnDraw3bspline() {</p><p>  RedrawWindow();</p><p>  CClientDC *

68、pdc=new CClientDC(this);</p><p><b>  CPen pen;</b></p><p>  pen.CreatePen(PS_SOLID,1,RGB(0,0XFF,0));</p><p>  CPen *oldpen=(CPen*)pdc->SelectObject(&pen);</p&g

69、t;<p>  pdc->TextOut(100,50,"三次B樣條曲線");</p><p>  int cx,cy,i,n;</p><p><b>  n=9;</b></p><p>  double t,t2,t3,a0,a1,a2,a3,b0,b1,b2,b3,dt,xa,ya;</p&

70、gt;<p><b>  cx=10;</b></p><p><b>  cy=160;</b></p><p>  static int x[4]={30,60,120,220},y[4]={30,110,150,50};</p><p>  a0=(x[0]+4*x[1]+x[2])/6;</p&

71、gt;<p>  a1=-(x[0]-x[2])/2;</p><p>  a2=(x[2]-2*x[1]+x[0])/2;</p><p>  a3=-(x[0]-3*x[1]+3*x[2]-x[3])/6;</p><p>  b0=(y[0]+4*y[1]+y[2])/6;</p><p>  b1=-(y[0]-y[2]

72、)/2;</p><p>  b2=(y[2]-2*y[1]+y[0])/2;</p><p>  b3=-(y[0]-3*y[1]+3*y[2]-y[3])/6;</p><p>  dt=1.0/n; </p><p>  for (i=0;i<=n;i++){</p><p><b>  t=i

73、*dt;</b></p><p><b>  t2=t*t;</b></p><p><b>  t3=t2*t;</b></p><p>  xa=a0+a1*t+a2*t2+a3*t3+cx;</p><p>  ya=cy-(b0+b1*t+b2*t2+b3*t3);</p&

74、gt;<p>  if(i==0) pdc->MoveTo(xa,ya);</p><p>  else pdc->LineTo(xa,ya);</p><p><b>  }</b></p><p>  pdc->DeleteDC();// TODO: Add your command handler c

75、ode here</p><p><b>  }</b></p><p>  4.4 程序運行效果圖</p><p>  三次貝塞爾去效果圖如圖4.3.1所示:</p><p>  圖4.3.1三次B樣條曲線</p><p><b>  5 正葉線</b></p>

76、<p><b>  5.1 正葉線</b></p><p>  正葉線是一種類似植物葉子形狀的曲線,數(shù)學表達式為:</p><p>  R=asin(n×theta)</p><p>  X=rcos(theta) (a>0,n=2,3,4,5,.........)</p><p>  Y

77、=rsin(theta)</p><p>  可以通過修改上述數(shù)學表達式,繪制由二重、三重的正葉線組成的美麗圖形。</p><p>  5.2 正葉線源碼及效果圖</p><p>  void CMyView::OnDrawLeaf() </p><p><b>  {</b></p><p> 

78、 CClientDC *pdc=new CClientDC(this);</p><p><b>  CPen pen;</b></p><p>  pen.CreatePen(PS_SOLID,1,RGB(0,0XFF,0));</p><p>  CPen *oldpen=(CPen*)pdc->SelectObject(&p

79、en);</p><p>  int a,n,cx,cy,gx,gy,flag,k;</p><p>  double r,p,th,x,y,pi;</p><p>  a=160;n=2; pi=3.14159;</p><p><b>  cx=320;</b></p><p><b&g

80、t;  cy=240;</b></p><p>  flag=0;k=200;</p><p>  for(p=1;p>=0.2;p-=0.2){</p><p>  for(th=0;th<=2*pi+0.1;th+=pi/k){</p><p>  r=abs(a*cos(n*th)*p);</p>

81、<p>  x=int(r*cos(th));</p><p>  y=int(r*sin(th));</p><p>  gx=int(cx+x);</p><p>  gy=int(cy+y);</p><p>  if(flag==0) {pdc->MoveTo(gx,gy);}//,RGB(255,0,0));}&l

82、t;/p><p><b>  flag=1;</b></p><p>  pdc->LineTo(gx,gy);</p><p><b>  }</b></p><p><b>  flag=0;</b></p><p><b>  }<

83、;/b></p><p>  pdc->DeleteDC();</p><p><b>  }</b></p><p>  程序運行效果圖如圖5.2.1所示:</p><p><b>  圖5.2.1正葉線</b></p><p><b>  結(jié) 論&l

84、t;/b></p><p>  2012年的3月,我開始準備我的畢業(yè)設計論文,時至今日,論文基本已經(jīng)完成,從當初拿到題目的茫然,隨后開始到處找資料,慢慢開始有些思路,到現(xiàn)在的思路清晰,整個過程充滿努力的汗水,無法用三言兩語就能表達,如今畢業(yè)設計已經(jīng)差不多完成了,我時常在想,畢業(yè)設計的完成預示著什么?</p><p>  預示我即將大學畢業(yè),即將離開我心愛的母校,去外面的社會闖蕩,開始

85、我新的生活。</p><p>  2012年12月,當我知道我的選題通知后,我開始著手準備論文,開始的,對于論文的題目都有些不懂,不明白論文要寫那些方面,而且既然決定開始寫的話,就必須確定自己要寫那些方面,于是我主動去找我的導師,卜飛宇老師,及時與他溝通,通過老師的耐心指導和幫助,我確立了我要寫的方向。</p><p>  寒假在家的時候,我時常去網(wǎng)上查找我與我題目相關的資料,還認真的帶了

86、本筆記本,記錄了許多重要的信息,還對很多信息進行的比較,選擇最有利我論文的資料。 </p><p>  老師對于我準備的資料抱有了肯定的態(tài)度,我一起討論我準備的東西,從中找出那些東西可以再論文中用到,那些不能用,2012年2月,由于自己覺得很多專業(yè)知識不夠,因此在外面開始培訓,至此不能經(jīng)常跟老師見面,不夠還是經(jīng)常電話和網(wǎng)上交流論文的相關信息。</p><p>  2012年3月,學校開始

87、要求我們交開題報告,由于自己有做過相關的準備,因此很快就完成的任務。4月中旬,學校要求我們準備畢業(yè)設計論文的一稿。經(jīng)常許多時間準備,順利的做完了初稿,老師對我的初稿進行了很多了改動,說很多地方還不合格,因此我針對老師要求改動的地方做了改變。5月初,我將改動后的2稿交給了老師。現(xiàn)在論文已經(jīng)有1萬多字了,基本符合的學校的要求,但我知道我還沒有完成,我還需要準備我的最終3稿和畢業(yè)答辯。</p><p>  這就是我畢業(yè)

88、設計的準備過程,有許多的困難,但是我最后還是挺過來了,感謝卜老師的幫助,沒有你的幫助,我不可能這么順利的完成。</p><p><b>  參考文獻</b></p><p>  [1] Bezier P E.Example of an existing system in motorindustry:theUNISURFsystem [J].ProcRoySocofL

89、ondon,1971,A321:207-218.</p><p>  [2] Coons S A.Sunfaces for computer aided design of spacfrms [R].Cambridge Mass:MIT Project MAC-TR-255,1964:55-65.</p><p>  [3] Coons S A Sufaces for computer

90、aided design of space forms,MIT Priject:36-60.</p><p>  [4] 杜雙興,殷學文,李琪華。B-SPline高階元方法在三維水彈性力學中的應用[J].船舶力學,2004,4(1):17-23.</p><p>  [5] 孫玉文,陳偉卿.B樣條技術在RPM切片數(shù)據(jù)處理中的應用[J]。航空精密制造技術,2002,38(4):30-32.&

91、lt;/p><p>  [6] 葛玉琛,程昌年.實驗數(shù)據(jù)的B樣條壓縮法[J].天津職業(yè)技術師范學院學報,2000,10(1):15-16.</p><p>  [7] 任重,楊燦軍.陳鷹.軌跡規(guī)劃中的B樣條插值算法[J].機電工程,2001,18(5):38-39.</p><p>  [8] 黃維通.Visual C++面向?qū)ο笈c可視化程序設計[M].北京:清華大學出

92、版社,2003:20.</p><p>  [9] forest A R. Interpolation and Approximation by Bezier Polynomials[J]. Computer Joumal,1972,15(1):71-79.</p><p>  [10] Frain G.Algonrithms for rational Bezier curves[J].

93、Computer Aided Design,</p><p>  1983,15(1):71-79. </p><p>  [11]Pank Y,chui U.Degree Reduction of Bezier Curves [J].Joumal of Australian Mathem atical Society Seris B,1996,36:399-413.</p>

94、<p>  [12] MooreD,WarrenJ.Least-square Approximation to Bezicurvsand Sufaces[A].In: JamesArvoeds.ComputGemes(II)[C].NewYork :AcademicPress,1991:30.</p><p>  [13] LodhaS,WarrenJ.Degreere Ductionof Bezie

95、r Simp;exes[J]. Computer Aided Design,</p><p>  1994,26:735-746.</p><p><b>  致 謝</b></p><p>  本文是在卜飛宇老師的諄諄教誨和悉心指導下完成,卜老師在學術上有著嚴謹?shù)目蒲凶黠L,實事求是的治學態(tài)度,并時刻能夠把握最新科技的前沿,讓我受益匪淺,卜老師

溫馨提示

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

評論

0/150

提交評論