




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
用VC+實現(xiàn)數(shù)學(xué)函數(shù)圖形繪制用VC+實現(xiàn)數(shù)學(xué)函數(shù)圖形繪制Use the VC+ to realize drawing figures of mathematic functions 指導(dǎo)教師:付勇 制作人:劉海,盧文娟 Tutor: Fu yong Producer:Liu hai 、 Lu wenjuan摘要 Visual C+(以下簡稱VC+) 是面向?qū)ο笈c可視化軟件開發(fā)工具中比較成熟的一類。MFC是VC+中直接由Microsoft提供的類庫,它集成了大量已定義好的類,我們可以根據(jù)需要,調(diào)用相應(yīng)類,或根據(jù)需要自定義類。正是基于MFC的這種特性,我們試圖設(shè)計出具有封裝性、獨立性的功能模塊-函數(shù)數(shù)據(jù)生成模塊,函數(shù)曲線輸出模塊,模塊之間的橋梁是由模板類CArray派生的CPoint類數(shù)組充當(dāng)?shù)?。函?shù)數(shù)據(jù)生成模塊用來實現(xiàn)對函數(shù)的設(shè)置并獲得采樣點,數(shù)組得到采樣點數(shù)據(jù)并將其傳遞到輸出模塊中。從整體來看,實現(xiàn)了各程序模塊的獨立性,使得在函數(shù)模塊中可任意添加、刪除函數(shù),可使用不同的DC和GDI,可實現(xiàn)不同的輸出方式,整個工程在函數(shù)繪圖功能上是無限擴展的。經(jīng)過反復(fù)的調(diào)試和檢驗,我們實現(xiàn)了預(yù)期目標。我們的主要目的是嘗試VC+在數(shù)學(xué)函數(shù)繪圖方面的功能和應(yīng)用。這是對VC+的探索,也是對數(shù)學(xué)函數(shù)繪圖多樣化的嘗試。關(guān)鍵字數(shù)學(xué)函數(shù) 圖形繪制 模板數(shù)組 三次樣條【Abstract】Visual C+ is one of the object oriented and visual software developer ,which is more mature than others . MFC is a class warehouse which is supplied by Microsoft ,and it contains a great deal of defined classes .we can transfer the corresponded class if necessary ,or give a fresh definition according our needs . Exactly based on MFC this kind of character, we try to design out the function mold which have the function to pack the class and be independent -Mold for creating Function data, Mold for outputting the function curve, mold piece of born mold piece be sent by Cpoint Array rared by template CArray.The first mold is to make out sets for the function and get data we need which will be sent to the defined array,so now the array have the data that is to be got by the second mold.From whole project,we can see the independence of each mold,and exactly we may increase and decrease functions if necessary,we even can use different DC and GDI to realize the customed exportation method by which we can have a new view of the function curve. So, the function of the project can be extended freely.after repeatedly debugging and examining,we achieve our purpose.The most important thing we are trying is to find a way to connect the VC+ and the figures of mathmetic functions.This is not only a exploration to VC+,but also a attempt for realizing diversifing the mathmetic functions. 【Key words】Mathematic functions drawingfigures template array tripline 目 錄用VC+實現(xiàn)數(shù)學(xué)函數(shù)圖形繪制1Use the VC+ to realize drawing figures of mathematic functions1摘要1關(guān)鍵字1一、引言4二、設(shè)計思路52.1總體結(jié)構(gòu)的設(shè)計52.2基本結(jié)構(gòu)的設(shè)計62.3面臨的問題62.4解決問題的方法6三、實現(xiàn)三次樣條函數(shù)繪圖103.1函數(shù)定義103.2邊界條件103.3函數(shù)表達式113.4算法123.5程序?qū)崿F(xiàn)123.6效果14四、結(jié)論16參考文獻18附錄20一、引言 從事科技研究的人員常常需要解決一些復(fù)雜的數(shù)學(xué)問題,而這些數(shù)學(xué)問題的解答往往可以從它的函數(shù)圖形上很直觀、明了的表現(xiàn)出來,這時快捷方便的繪制出該數(shù)學(xué)函數(shù)的圖形就顯得尤為重要。用Matlab等數(shù)學(xué)軟件就可以做到這一點,但是當(dāng)我們需要在我們自己的軟件產(chǎn)品中快速簡潔的繪制出眾多自定義的數(shù)學(xué)函數(shù)圖形時,用Matlab等數(shù)學(xué)軟件就有些麻煩。所以我們選擇了用VC+來實現(xiàn)數(shù)學(xué)函數(shù)圖形的繪制。隨著軟件工程技術(shù)的不斷發(fā)展,應(yīng)用面向?qū)ο蟮木幊碳夹g(shù)已經(jīng)成為當(dāng)今軟件開發(fā)的重要手段之一,尤其是VC+的出現(xiàn),大大推進了面向?qū)ο笈c可視化編程技術(shù)的應(yīng)用與發(fā)展。 VC+主要使用了兩種方法:1 用Windows提供的Windows API函數(shù)。2 直接使用Microsoft提供的MFC類庫。我們選用的是MFC Appwizard(exe)工程。MFC類庫是VC+中直接由Microsoft提供的一種編程資源,是對程序設(shè)計的高度抽象,它集成了大量已定義好的類,我們可以根據(jù)需要,調(diào)用相應(yīng)類,或根據(jù)需要自定義有關(guān)類,使得程序員的主要精力不用放在程序設(shè)計的細節(jié)實現(xiàn)上,而放在程序的功能拓展上。它允許在編程過程中自定義和擴展運用程序中的類,同時還允許對Windows API函數(shù)進行存取,從而使運用程序能以最小的規(guī)模實現(xiàn)最豐富的功能,而且能提供高效率的運行代碼。更重要的是,MFC可以封裝不同的類,將類封裝后,形成一個功能模塊。也就是說,允許為實現(xiàn)功能模塊而將不同的類封裝。我們選擇了用Visual C+來實現(xiàn)數(shù)學(xué)函數(shù)圖形的繪制。還有以下幾種考慮:1、 VC+的良好特性促使我們?nèi)チ私?,熟悉和開發(fā);2、 四年來計算數(shù)學(xué)的學(xué)習(xí)讓我們產(chǎn)生了對一些數(shù)學(xué)算法進行深一步的實踐探索;3、 用VC+來實現(xiàn)函數(shù)的繪圖功能是很有優(yōu)勢的。VC+的繪圖過程直接引用Windows系統(tǒng)本身資源,繪圖速度很快,不同的映像模式還可以確保圖形的準確;其可視化的界面設(shè)置簡單明了;4、 對圖形的繪制和算法的研究是無止境的,很多時候需要更具體、更詳盡和易懂的算法設(shè)計,這需要選取一種好的語言自己編寫。VC+基于C+語言,易懂且容易掌握。MFC類庫的特性無限擴展了VC+的功能,用它來實現(xiàn)復(fù)雜多變的數(shù)學(xué)算法無疑是一個好的選擇。VC+運用對象、類、消息傳遞、封裝等概念來構(gòu)造系統(tǒng),要實現(xiàn)各種各樣圖形的繪制,我們可以將函數(shù)看作對象,將各種函數(shù)封裝起來,形成不同的類,組成函數(shù)模塊。將處理數(shù)據(jù)和輸出圖形定義在不同的模塊中,而模塊之間的接口則是通過用VC+的類數(shù)組模塊定義的CPoint類數(shù)組實現(xiàn)的。二、 設(shè)計思路2.1總體結(jié)構(gòu)的設(shè)計正是以上了解使我們得出了這樣一條編程思路:函數(shù)數(shù)據(jù)生成模塊,函數(shù)曲線輸出模塊,中間媒介由CPoint類數(shù)組構(gòu)成。函數(shù)數(shù)據(jù)生成模塊是實現(xiàn)對函數(shù)的設(shè)置:包括參數(shù)設(shè)置,自變量設(shè)置,數(shù)據(jù)輸入,并從算法中得到采樣點,再將采樣點傳給CPoint類數(shù)組。函數(shù)曲線輸出模塊則要從CPoint類數(shù)組中得到采樣點,在已定義好的輸出環(huán)境中以描點連線的方式繪制圖形。(如圖1.1)函數(shù)數(shù)據(jù)生成模塊CPoint類數(shù)組函數(shù)曲線輸出模塊(圖1.1)這樣的設(shè)計既體現(xiàn)了模塊間的獨立性,也體現(xiàn)了數(shù)組在兩個模塊間的橋梁關(guān)系。由于對函數(shù)的設(shè)置也是獨立的,選擇不同的函數(shù)會出現(xiàn)與之相適應(yīng)的設(shè)置,繪出相應(yīng)的函數(shù)圖形,所以各函數(shù)間也是互相獨立的,對整個工程的其他部分是沒有影響的。我們以sin,cos作為開始的嘗試,主要為熟悉VC+的開發(fā)環(huán)境,構(gòu)造出良好的繪圖環(huán)境,再以三次樣條函數(shù)為重點實現(xiàn)對算法的分析,充分利用MFC的優(yōu)勢,達到目的。2.2基本結(jié)構(gòu)的設(shè)計1 將所要表達的對象封裝。對函數(shù)的屬性主要是參數(shù)設(shè)置-一般用對話框來實現(xiàn);對函數(shù)的服務(wù)即函數(shù)算法用具體函數(shù)來表達,再將具體的函數(shù)一個個的封裝到為他們創(chuàng)建的函數(shù)模塊中,使它們完全獨立開來;2 我們用函數(shù)數(shù)據(jù)生成模塊得到了數(shù)據(jù)-采樣點,為實現(xiàn)合理的函數(shù)繪圖形式,對采樣點要做必要的處理后,放入到類數(shù)組中;3 函數(shù)曲線輸出模塊專門負責(zé)營造輸出氛圍:用畫筆還是畫刷,用多文檔輸出還是單文檔,用那一種映像模式,界面看起來是否美觀。當(dāng)然,最終是獲得數(shù)組中的數(shù)據(jù),將它們放到適合的坐標軸上,隨即連線成圖??此篇毩⒌娜齻€部分實際上是相互牽制和彼此照顧的,采樣點受到模板數(shù)組的影響,通常不同函數(shù)得到采樣點在放入模板數(shù)組前所作的處理也不同。2.3面臨的問題我們面臨的問題有技術(shù)方面的和對每個函數(shù)的具體設(shè)置,有如下幾個方面:1 函數(shù)參數(shù)設(shè)置,自變量的范圍,函數(shù)的具體算法;2 輸出設(shè)置:繪圖方式,坐標的建立、設(shè)置,圖形的縮放;3 對數(shù)組模板類的引用;4 對誤差的控制。2.4解決問題的方法1、函數(shù)數(shù)據(jù)生成模塊方面,我們利用對話框來完成對自變量范圍、各種參數(shù)的設(shè)置,這使得對函數(shù)特性控制更明了和簡單。(如圖1.2)(圖1.2)函數(shù)參數(shù)設(shè)置對話框所要關(guān)注的是采樣點。采樣點通過算法得到后,需要符合類數(shù)組對數(shù)據(jù)的要求,考慮到屏幕坐標是整型值,因此,所定義的類中的分量類型也應(yīng)是整型,而采樣點的數(shù)據(jù)類型是多樣的,所以輸入前,需要對它們進行必要的處理,而又由于受輸出模塊中映像模式的影響,輸出時也有必要對從數(shù)組中得到的數(shù)據(jù)進行處理。2、CPoint類數(shù)組的使用是一個重點。它是由模數(shù)組定義的一個新的類數(shù)組類型。使用模板化,就可以使這段程序能夠處理某個類型范圍內(nèi)的各種類型的對象。模板具有兩種形式:函數(shù)模板和類模板。/定義模板數(shù)組typedef CArrayCPntArray ;模板類CArray派生的CPoint類數(shù)組具有動態(tài)擴展數(shù)組長度,自動添加和刪除以及設(shè)置數(shù)組元素的優(yōu)良特性。當(dāng)需要增加數(shù)組長度時,不必要提出增加內(nèi)存空間的申請,類數(shù)組會自動滿足,這就有利于承接和輸出不同的采樣點數(shù),對于不同的函數(shù)這顯然是符合要求的。但模板數(shù)組內(nèi)存儲是整型的CPoint對象,為了畫圖的可視性和提高精度,需要對采樣值進行成比例放大變換。例如點(0.015,0.203)要存入模板數(shù)組,如果不進行變換,系統(tǒng)就會將其強制轉(zhuǎn)換成整型,點就變?yōu)?0.0),而如果對其進行適當(dāng)?shù)臄U大,為了適應(yīng)常見的軸-我們普通的坐標軸一般以厘米為單位,而實際屏幕坐標是以像素為單位,并且這還與映像模式有關(guān)。在sin,cos的例子中我們的映像模式是MM_LOMETRIC它將邏輯單位映像為0.1mm,所以面對點(0.015,0.203)我們需要把它變成邏輯單位是厘米的點,需要乘以100,單位就變成厘米,點成了(1.5,20.3),存入模板數(shù)組后,點實際是(2,20),輸出點是(2,20)。然而,如果我們這樣處理,現(xiàn)將點乘以1000,點就變成了(15,203),以此存入模板數(shù)組,再將點輸出時除以10,那么輸出點就是(1.5,20.3)-如果對每個點都做這個處理,對于圖形差別就是很明顯的了,誤差和精度也容易控制。3、函數(shù)曲線輸出模塊是整個設(shè)計的核心。函數(shù)數(shù)據(jù)生成模塊-CPoint類數(shù)組-函數(shù)曲線輸出模塊。那么,我們用什么畫,以怎樣的方式來畫呢?這就需要引用計算機繪圖的兩個重要部分-設(shè)備環(huán)境(DC)和圖形設(shè)備接口(GDI)。DC主要定義了繪圖的狀態(tài)和方式,而GDI則主要定義了繪圖工具,而且還可以確定在應(yīng)用窗口中繪制圖形的方式,即確定繪圖模式和映像模式。映像模式通過將圖形從程序員定義的邏輯坐標窗口映射到物理設(shè)備的視口已實現(xiàn)坐標轉(zhuǎn)換。窗口是對應(yīng)邏輯坐標上用戶設(shè)定的一個區(qū)域,視口是對應(yīng)于實際設(shè)備上用戶定義的一個區(qū)域。具體解釋如下:用屏幕坐標即像素點設(shè)立一個窗口,利用選中的映像模式,確定一個以邏輯坐標系為基礎(chǔ)的窗口和一個以物理設(shè)備坐標系為基礎(chǔ)的視口,Windows系統(tǒng)即可按照窗口和視口的坐標比例自動調(diào)整圖形,這樣實現(xiàn)了設(shè)備的無關(guān)性。原點的定義很好的解釋了視口與窗口,又為建立坐標系,畫圖確立了基調(diào)。在我們想象中,原點一般都在屏幕的中央,這就是窗口的原點(0,0),然而它在視口中卻可能不是(0,0),因為視口的(0,0)點在屏幕的左上角,我們所要得到的是屏蔽了視口的的窗口坐標,希望得到的是現(xiàn)實中的坐標系,如此定義,即可得到與設(shè)備無關(guān)的邏輯坐標系:/獲取屏幕窗口矩形區(qū)域,并賦給rcCrect rc;GetClientRect(& rc);/選取系統(tǒng)GDI對象(將GDI對象CBRUSH選進DC中)pDCSelectStockObject(NULL_BRUSH);/設(shè)置映像模式pDCSetMapMode(MM_LOMETRIC);/設(shè)置屏幕中心為原點(窗口的原點,視口的中心)pDCSetViewportOrg(rc.right/2,rc.bottom/2);在這個程序片斷中,不僅設(shè)立了邏輯坐標原點,利用映像模式確立了坐標軸的邏輯坐標和X軸Y軸的方向,建立了視口與窗口的比例,而且將GDI對象選入DC中,實現(xiàn)了設(shè)備環(huán)境和圖形設(shè)備接口的關(guān)聯(lián),確立了圖形的基調(diào)。著重解釋視口與窗口的區(qū)別是因為我們?yōu)槔斫膺@個很繞的問題,作了許多的假設(shè)、推理,對自己的邏輯推理和思考問題的方式實在是一個鍛煉?,F(xiàn)在總結(jié)我們的問題解決方案: 函數(shù)方面。因為我們選用的sin,cos函數(shù)在VC+的函數(shù)庫中有定義,所以對他們的設(shè)置主要是參數(shù)和自變量的范圍以及段數(shù)(段數(shù)就是對自變量范圍的等距劃分,)選取這兩個簡單的函數(shù)讓我們熟悉VC+的運作方式,對三次樣條的設(shè)計是重要的部分,要進行詳細的講解。 模板是C+語言的一個重要特性,它是一種工具。使用模板可以使程序員建立具有通用類型的函數(shù)庫和類庫。模板具有兩種不同的形式:函數(shù)模板和類模板。數(shù)組方面,我們只是引用類模板,不需要特別的要求。在程序中我們作如下聲明和定義得到可動態(tài)變化長度的CPoint類型的模板數(shù)組: #include afxtempl.h/定義模板數(shù)組m_PntArraytypedef CArrayCPntArray ;CPntArray m_PntArray; 輸出模塊中,我們定義了坐標軸的繪制以及視口與窗口的的比例,得到畫筆,將GDI對象選入DC中,確立了輸出模式,得到采樣點,將點連線繪在坐標軸上,即得到函數(shù)圖形。從數(shù)組中獲取采樣點并繪圖程序許代碼是:if (m_PntArray.GetSize()0)DrawCrood(pDC); /繪制坐標軸;CPoint ps=m_PntArray.GetAt(0);pDC-MoveTo(ps.x+m_Dis,ps.y+m_Ds) ; /定位初始點;for(int k=0;kLineTo(ps.x+m_Dis,ps.y+m_Ds); 4誤差存在于算法的設(shè)計、數(shù)據(jù)的處理。三次樣條算法誤差控制是基于數(shù)值分析6中對三次樣條插值收斂性的討論,證明了插值函數(shù)一致收斂于原函數(shù),說明了程序算法設(shè)計已將模型誤差控制到最小。在接收、計算、存儲、輸出數(shù)據(jù)時,都是雙精度的,保證舍入誤差最小;它將邏輯單位映像為0.1mm,保證了圖形的精確。三、實現(xiàn)三次樣條函數(shù)繪圖三次樣條函數(shù)是分段插值算法中比較成熟且精度較高的一種,它具有二階連續(xù)導(dǎo)數(shù),光滑性較好,適合像高速飛機的機翼形線、船體放樣等型直線等往往要求有二階光滑度的情況。3.1函數(shù)定義定義:若在具有二階連續(xù)導(dǎo)數(shù),且在每個小區(qū)間上是三次多項式,其中是給定節(jié)點,則稱是節(jié)點的三次樣條函數(shù)。若在節(jié)點上給定函數(shù)值(j=0,1,2,n),并成立 (j=0,1,2.,n) (3.1)則稱為三次樣條插值函數(shù)。3.2邊界條件 三次樣條插值函數(shù)的邊界條件: (3.2) (j=1,2,) (3.3)3.3函數(shù)表達式滿足條件(3.1)及加上邊界條件(3.2),(3.3)的三次樣條函數(shù)的表達式,可得 (3.4)其中是由分段三次Hermite插值所得的基函數(shù), ;將 ,代入(3.4)得到在上的表達式: (3.5) ,所要求的是根據(jù)以及邊界條件(3.2),(3.3)得矩陣方程: (3.6)如下: (3.7)(3.8)3.4算法算法步驟:步1 輸入初始數(shù)據(jù)xj,yj(j=0,1,2,n)及 , , , 和n;步2 j從0到n-1計算hj= x j+1- xj及xj,xj+1 ;步3 j從1到n-1由公式(4.6),(4.7)及計算j,j, gj ;步4 用追趕法解方程求出;步5 計算的系數(shù)或計算在若干點上的值,得到采樣點,繪出圖形。3.5程序?qū)崿F(xiàn)u 函數(shù)關(guān)系圖 函數(shù)數(shù)據(jù)生成模塊 函數(shù)曲線輸出模塊CPoint類數(shù)組函數(shù)信息繪制坐標軸連接采樣點算法實現(xiàn)數(shù)組賦值坐標樣式參數(shù)參數(shù)輸入 u 三次樣條算法實現(xiàn)函數(shù)void CLLLView:OnCreateYang() Invalidate(TRUE); InputYang(); /調(diào)用InputYang();實現(xiàn)輸入初始數(shù)據(jù) (j=0,1,2,n)及邊界條件和原始數(shù)據(jù)個數(shù) Zuigan(); /調(diào)用Zuigan();實現(xiàn)追趕法求for(k=xi0;kxin-1;k+=(xin-1-xi0)/m_Num) /計算采樣點的值并賦給數(shù)組;kx=k;for(i=0;i=xii & kx=xii+1)ky=(kx-xii+1)*(kx-xii+1)*(hi+2*(kx-xii)*yii/(hi*hi*hi)+ (kx-xii)*(kx-xii)*(hi+2*(xii+1-kx)*yii+1/(hi*hi*hi)+ (kx-xii+1)*(kx-xii+1)*(kx-xii)*mi/(hi*hi)+ (kx-xii)*(kx-xii)*(kx-xii+1)*mi+1/(hi*hi); CPoint SegPoint ; /定義臨時點SegPoint.x=(int)(100*kx) ; /將采樣點值賦給臨時點;SegPoint.y=(int)(100*ky) ; /臨時點值存入CPoint類數(shù)組m_PntArray;m_PntArray.Add(SegPoint) ;Compare(); /調(diào)用Compare()函數(shù)實現(xiàn)坐標變換;st4.Format (Yong();st1.Format(%d,m_Num);st2.Format(%d,(int)xi0);st3.Format(%d,(int)xin-1);Invalidate(TRUE); /刷新屏幕,調(diào)用OnDraw()函數(shù)進行繪圖;其他功能函數(shù)代碼見附錄。3.6效果 程序整體效果 函數(shù)參數(shù)設(shè)置對話框程序整體效果圖 三次樣條實例 xi2.5003.0003.9004.5005.300yi5.0005.4776.2456.7087.280三次樣條插值函數(shù)的邊界條件: 實例圖 三次樣條函數(shù)繪出的sinsin()參數(shù)設(shè)置三次樣條參數(shù)設(shè)置:xi00.40000.80001.20001.60002.00002.40002.80003.20003.6000yi2.49502.4833 2.39262.22641.99141.69691.3548 0.97850.58320.1845 三次樣條插值函數(shù)的邊界條件: 三次樣條函數(shù)繪圖與sin()的比較從比較繪圖來看,三次樣條函數(shù)繪制的圖形與原函數(shù)圖形比較吻合,說明我們的三次樣條函數(shù)算法可行,誤差控制良好。四、結(jié)論通過利用VC+的MFC類實現(xiàn)了sin,cos及三樣條函數(shù)的圖形繪制,我們對VC+的開發(fā)環(huán)境和運行方式有了更深的認識,對數(shù)學(xué)函數(shù)的算法以對函數(shù)本身的了解有了新的高度,尤其是將二者結(jié)合起來的嘗試讓我們對開發(fā)軟件過程中所遇到的困難有了切身的體會,同時又對尋找解決問題的出路充滿了興趣,基本實現(xiàn)了我們要求的預(yù)期效果。但問題是存在的: 由于自身能力和實踐的有限,我們沒能實現(xiàn)過更有意義的函數(shù),進行更深層次的探討和開發(fā); 工程本身也有不完善的地方,我們只是實現(xiàn)了算法,但沒能對圖的準確性、精度、誤差做出精確估計和判斷,也沒有對算法作進一步的研究,以期得到更簡便的算法; 坐標軸對自變量的范圍有一定限制;當(dāng)自變量范圍很大時,函數(shù)圖形顯示的會不完整,影響函數(shù)圖形的整體效果。但我們?nèi)匀粦c幸自己做了這么個嘗試:若是遇到數(shù)學(xué)方面一些具體而又需要自己編程時,VC+不失為一個好工具,它的面向?qū)ο蠛涂梢暬脑O(shè)計,它的編程語言的易于編寫和易于理解,它的繪圖速度,尤其是它的自定義類功能和程序的模塊化,都證明它是一個好的開發(fā)工具。在此論文設(shè)計過程中,劉海同學(xué)主要負責(zé)軟件方面的工作,做了許多有創(chuàng)新意義的工作,包括程序模塊化的實現(xiàn)、輸出方式的定義、坐標軸的確定以及對模板類CArray派生的CPoint類數(shù)組的引用等。盧文娟同學(xué)主要分擔(dān)了數(shù)學(xué)函數(shù)方面的設(shè)計工作;實現(xiàn)了函數(shù)數(shù)據(jù)生成模塊,特別是三次樣條函數(shù)算法的確立。最后完成了論文的寫作。參考文獻1、Visual C+程序設(shè)計教程 機械工業(yè)出版社 黃維通,姚瑞霞2、用C+語言編寫數(shù)學(xué)常用算法 人民郵電出版社 陳必紅3、C+語言程序設(shè)計 電子工業(yè)出版社 呂鳳翥4、C程序設(shè)計 清華大學(xué)出版社 譚浩強5、Visual C+實踐與提高-圖形圖像篇 中國鐵道出版社 李于劍6、數(shù)值分析 華中科技大學(xué)出版社 李慶揚,王能超,易大義致謝衷心的感謝我們的指導(dǎo)教師付勇老師,他從一開始的程序整體設(shè)計,到程序的具體實施以及論文的最后成形,為我們解決了許多疑難問題,提出了許多意見,尤其是在引用模板類CArray派生的CPoint類數(shù)組時,幫我們解決最主要的難題,是整個工程順利完成的關(guān)鍵。付老師細致、認真的指導(dǎo)態(tài)度一直激勵著我們,促使我們在做畢業(yè)論文過程中以嚴謹?shù)膽B(tài)度對待每一個問題。我們還要感謝熱心的同學(xué),他們?yōu)槲覀冋襾砹速Y料,提出了很多好的看法,最后我們互相感謝對方,盡管合作期間有時意見相左,但經(jīng)過我們的不斷的交流、探究,最后在整個工程的每個細節(jié)都達到了一致,我們一直合作愉快!盧文娟 劉海 2003/6/10附錄u 參數(shù)輸入函數(shù)程序代碼:(輸入初始數(shù)據(jù)xj,yj(j=0,1,2,n)及f0 ,fn,fn,fn和原始數(shù)據(jù)個數(shù)n)void CLLLView:InputYang() /三樣條參數(shù)輸入m_PntArray.RemoveAll( ); /數(shù)組賦空;flag=0;CInput1 Input1; /實例化對話框類CInput1,接收要輸入數(shù)據(jù)的個數(shù)和段數(shù); Input1.m_Ds=m_Num;Input1.m_Num=n;if(Input1.DoModal()=IDOK)flag=4;m_Num=Input1.m_Ds;n=Input1.m_Num;CInput2 Input2; /實例化對話框類CInput2,輸入邊界條件;Input2.m_F1=f1; /將默認的邊界條件賦給Input2的成員變量;Input2.m_F2=f2; Input2.m_F3=f3;Input2.m_F4=f4; if(Input2.DoModal()=IDOK) /將Input2成員變量獲得的值賦給內(nèi)存變量;f1=Input2.m_F1;f2=Input2.m_F2;f3=Input2.m_F3;f4=Input2.m_F4;for(i=0;in;i+)CInput3 Input3; /實例化對話框類CInput3,輸入原始數(shù)據(jù);Input3.m_Shu=i+1;if(Input3.DoModal()=IDOK)xii=Input3.m_Xi;yii=Input3.m_Yi;else break;u 追趕法實現(xiàn)函數(shù)程序代碼:(求)void CLLLView:Zuigan()for(i=0;in-1;i+) / j從0到n-1j計算hj= x j+1- xj及fxj,xj+1;hi=(xii+1-xii);fi=(yii+1-yii)/hi;for(i=1;in-1;i+) / j從1到n-1由公式(4.6),(4.7)及計算j,j, gj;ri=hi/(hi-1+hi);ui=hi/(hi+hi);gi=3*(ri*fi-1+ui*fi);g0=3*f0-h0*f3/2;gn-1=3*fn-2-hn-2*f4/2;b0=1/2;for(i=1;i=n-2;i+) /追趕法的實現(xiàn),求解(3.6)bi=ui/(2-ri*bi-1);ni0=g0/2;for(i=1;i0;i-) mi=nii-mi+1*bi; /解出m0=f1;u 繪制坐標軸函數(shù)程序代碼:void CLLLView:DrawCrood(CDC *pDC) /繪制坐標軸;CRect rc ; /獲得屏幕窗口矩形區(qū)域,并賦給rc;GetClientRect(&rc) ; /獲得當(dāng)前客戶取得矩形區(qū)域m_Dis=0; /在調(diào)用Compare()函數(shù)前,此參數(shù)為0;if(sig=1) /根據(jù)Compare(),若采樣點橫坐標值全大于0,則X軸0點左移,使繪圖的有效區(qū)域增加; m_Dis=-rc.right+2*m_Riu ;m_Ds=0;if(sg=1)m_Ds=-rc.bottom+2*m_Riu ;pDC-MoveTo(-rc.right ,m_Ds) ; /移點至屏幕坐標左邊界點;pDC-LineTo(rc.right ,m_Ds) ; /劃線至屏幕右邊界點,成X軸;pDC-TextOut(rc.right+60,m_Ds-20,X) ; /輸出字母X;pDC-MoveTo(m_Dis,-rc.bottom ) ; /移點至屏幕坐標下邊界點;pDC-LineTo(m_Dis,rc.bottom ) ; /劃線至屏幕上邊界點,成Y軸; pDC-TextOut(m_Dis-50,rc.bottom+50 ,Y) ; /輸出字母Y;pDC-TextOut(m_Dis-25, m_Ds-15,0) ; /輸出窗口坐標的原點”0”;pDC-MoveTo(rc.right,m_Ds) ; /畫箭頭,標出X軸的方向;pDC-LineTo(rc.right-15,m_Ds+7) ;pDC-MoveTo(rc.right,m_Ds) ;pDC-LineTo(rc.right-15,m_Ds-7) ;pDC-MoveTo(m_Dis,rc.bottom) ; /畫箭頭,標出Y軸的方向;pDC-LineTo(7+m_Dis,rc.bottom-15) ;pDC-MoveTo(m_Dis,rc.bottom) ;pDC-LineTo(-7+m_Dis,rc.bottom-15) ;pDC-SetTextColor (RGB(0,0,255); /設(shè)置輸出文本顏色/X軸刻度for(i=-m_Riu;i=-rc.right-m_Dis;i-=m_Riu) /因為0點已經(jīng)確定,以0點為中心向正、負方向標刻度點;j=i/100;st.Format(%d,j);pDC-TextOut(i+m_Dis-10,m_Ds-20,st); /標出刻度值;pDC-SetPixel(i+m_Dis,m_Ds-1,(COLORREF)0X00FFFFFF) ; /描出刻度點;for(i=m_Riu;iTextOut(i+m_Dis-10,m_Ds-20,st); /標出刻度值; pDC-SetPixel(i+m_Dis,m_Ds-1,(COLORREF)0X00FFFFFF) ; /描出刻度點; /Y軸刻度for(i=-m_Riu;i=-rc.bottom-m_Ds;i-=m_Riu)j=i/100;st.Format(%d,j);pDC-TextOut(-40+m_Dis,m_Ds+i+20,st);pDC-SetPixel(-1+m_Dis,m_Ds+i,(COLORREF)0X00FFFFFF) ;for(i=m_Riu;iTextOut(-45+m_Dis,m_Ds+i+20,st);pDC-SetPixel(-1+m_Dis,m_Ds+i,(COLORREF)0X00FFFFFF) ;u 確定坐標軸樣式函數(shù)程序代碼:void CLLLView:Compare() /實現(xiàn)坐標變換for(i=0;i=0) /如果函數(shù)值大于0,則標識變量sg=1,確立X軸的位置;sg=1;elsebreak;sig=0;if(m_Xa=0) /如果自變量值大于0,標識變量sig=1,確立Y軸位置;sig=1;for(i=0;i=0) /判斷x軸,看是否調(diào)用Compare();sig=1;elsebreak;u OnDraw()函數(shù)代碼:void CLLLView:OnDraw(CDC* pDC)CLLLDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rc ;GetClientRect(&rc) ;/選取庫存GDI對象;pDC-SelectStockObject(NULL_BRUSH) ;/設(shè)置映射模式; pDC-SetMapMode(MM_LOMETRIC) ;pDC-SetWindowOrg(0,0) ;/設(shè)置
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西師范大學(xué)《傳熱學(xué)與換熱器》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西管理職業(yè)學(xué)院《景觀植物基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南財經(jīng)工業(yè)職業(yè)技術(shù)學(xué)院《醫(yī)學(xué)基礎(chǔ)化學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江特殊教育職業(yè)學(xué)院《文藝演出策劃與組織》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東生態(tài)工程職業(yè)學(xué)院《表面活性劑作用原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 不要下河游泳安全教育
- 生態(tài)系統(tǒng)的穩(wěn)態(tài)教學(xué)設(shè)計
- 武漢商貿(mào)職業(yè)學(xué)院《3DSMAX效果圖與動畫制作》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西電力職業(yè)技術(shù)學(xué)院《建筑工程定額預(yù)算》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京工業(yè)大學(xué)《測量平差基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 信托固定收益合同模板
- 2024年高考真題-生物(天津卷) 含解析
- T-LNEMA 013-2024 實驗室危險化學(xué)品貯存管理技術(shù)規(guī)范
- 麻辣燙合伙人合同協(xié)議書(2篇)
- 青年人要有艱苦奮斗的精神(2023年遼寧沈陽中考語文試卷議論文閱讀題及答案)
- 食品安全前提方案PRP程序
- 構(gòu)建水利安全生產(chǎn)風(fēng)險管控六項機制工作指導(dǎo)手冊
- 2024年廣東省廣州市中考數(shù)學(xué)試卷含答案
- 化糞池應(yīng)急預(yù)案方案
- 外研版英語四年級下冊閱讀理解練習(xí)(含答案)
- 紡織非遺:讓世界讀懂中國之美智慧樹知到期末考試答案章節(jié)答案2024年天津工業(yè)大學(xué)
評論
0/150
提交評論