![(雍俊海)JAVA程序設(shè)計教程-第2版-課后答案_第1頁](http://file4.renrendoc.com/view/d5bda4b28a420fea3c9fbe9cf7ebebc1/d5bda4b28a420fea3c9fbe9cf7ebebc11.gif)
![(雍俊海)JAVA程序設(shè)計教程-第2版-課后答案_第2頁](http://file4.renrendoc.com/view/d5bda4b28a420fea3c9fbe9cf7ebebc1/d5bda4b28a420fea3c9fbe9cf7ebebc12.gif)
![(雍俊海)JAVA程序設(shè)計教程-第2版-課后答案_第3頁](http://file4.renrendoc.com/view/d5bda4b28a420fea3c9fbe9cf7ebebc1/d5bda4b28a420fea3c9fbe9cf7ebebc13.gif)
![(雍俊海)JAVA程序設(shè)計教程-第2版-課后答案_第4頁](http://file4.renrendoc.com/view/d5bda4b28a420fea3c9fbe9cf7ebebc1/d5bda4b28a420fea3c9fbe9cf7ebebc14.gif)
![(雍俊海)JAVA程序設(shè)計教程-第2版-課后答案_第5頁](http://file4.renrendoc.com/view/d5bda4b28a420fea3c9fbe9cf7ebebc1/d5bda4b28a420fea3c9fbe9cf7ebebc15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
(雍俊海)JAVA程序設(shè)計教程-第2版-課后答案LtD第一章:P561、列出在你過去學(xué)習(xí)工作中用過與計算機圖形學(xué)有關(guān)的程序c語言:#include<graphics.h>main(){intgraphdriver=VGA,graphmode=VGAHI;initgraph(&graphdriver,&graphmode,””);setbkcolor(BLUE);setcolor(WHITE);setfillstyle(1,LIGHTRED);bar3d(100,200,400,350,100,1);floodfill(450,300,WHITE);floodfill(250,450,WHITE);setcolor(LIGHTGREEN);rectangle(450,400,500,450);floodfill(470,420,LIGHTGREEN);getch();closegraph();}可顯示“圖像”菜單:3、列出你所用過的圖形輸入、顯示及輸出設(shè)備的名稱、型號、生產(chǎn)廠商、出廠時間及其主要優(yōu)缺點。略4、比較個人計算機與工作站的圖形功能個人計算機僅限于符合二維,又是單任務(wù)操作方式工作站可處理二、三維,多任務(wù)操作方式區(qū)別個人計算機工作站顯示分別率640X4801024X900以上具有8個以上位面顯示器尺寸12~14英寸16、19、27英寸圖形處理能力符號或二維具有反走樣、線和面消隱、光照模型等處理硬件;同時還具有豐富的圖形生成和處理軟件主要處理二維或三維圖形、圖象計算機性能主要取決于微處理器的性具有更強的處理功能,在操能作系統(tǒng)、頁面虛擬存儲器和主要用途都有所不同操作方式單任務(wù)多任務(wù)、多進程l個人計算機的主要功能是字符處理,而工作站不僅有字符處理功能,還有較強的圖形處理功能l個人計算機的顯示分辨率較小,一般在640X480的圖形處理符號或二維圖形;而工作站為了滿足強大的圖形處理,顯示分辨率為一般為1024x1024的二維或三維圖形l個人計算機的顯示器相對工作站較小l個人計算機的圖形系統(tǒng)是由個人計算機加上圖形輸入輸出設(shè)備和有關(guān)的圖形支撐軟件集成起來的系統(tǒng),其性能取決于個人計算機所采用的微處理器芯片,個人計算機的圖形功能由于受到軟件和硬件的限制,只適合處理比較簡單的事情;個人計算機的顯示分辨率一般在640X480的圖形處理符號或二維圖形l而工作站在處理器、總線設(shè)計、存儲器、操作系統(tǒng)等多個方面都有比個人計算機優(yōu)越的地方,它配有專業(yè)的圖形輸入輸出設(shè)備,并配有圖形處理器以處理大量的復(fù)雜的圖形運算;它可以處理多任務(wù)進程、處理顯示分辨率為1024x1024的二維或三維圖形、具有高速的科學(xué)計算能力、豐富的圖形處理、靈活的窗口及網(wǎng)絡(luò)管理功能的交互式計算機系統(tǒng),它的圖形功能比個人計算機圖形系統(tǒng)強德多,但在造價上遠高于個人計算機。6、具有相同分辨率的彩色光柵顯示器與黑白光柵在結(jié)構(gòu)上有何區(qū)別?彩色:對于紅、綠、藍的三個原色有三個位面的幀緩存和三個電子槍,每個位面的幀緩沖對應(yīng)一個電子槍即對應(yīng)一種顏色;對每個顏色的電子槍可以通過增加幀緩存位面來提高顏色種類和灰度級,通過三種原色的組合可以產(chǎn)生不同種類的顏色。彩色光柵顯示器主要是有紅、綠、藍的三個原色所組成,每種原色電子槍有8個位面的幀緩存和8位的數(shù)模轉(zhuǎn)換器,每種原色有256種亮度,三種原色組合可為16771216種顏色,也可以通過顏色查找表查找,故幀緩存位數(shù)至少24位。黑白:黑白光柵顯示器的幀緩存是一塊連續(xù)的計算機存儲器,每個像素需1位存儲器,每個存儲器只有0或1兩個狀態(tài)。因此一個位面的幀緩存只能產(chǎn)生黑白圖形??梢栽黾酉笏攸c的位面數(shù),通過多個位面顯示出多種灰度級。7、在光柵顯示器上顯示斜線的45o角時常會發(fā)生鋸齒狀,請考慮減少鋸齒狀效果的各種方法并說明采用這些方法的代價。在光柵圖形顯示器上顯示斜線時常會發(fā)生鋸齒,這是由于直線或多邊形邊界在光柵圖形顯示器的對應(yīng)圖形都是由一系列相同亮度的離散象素構(gòu)成的。這種用離散量表示連續(xù)亮引起的失真稱為走樣,而用于減少或消除這種效果的技術(shù),稱為反走樣。一般而言,減少鋸齒有三種方法,下面以直線掃描轉(zhuǎn)換為例,分別介紹三種方法:(1)提高分辨率假設(shè)把顯示器的分辨率提高一倍,雖然直線經(jīng)過2倍的象素,鋸齒也會增加一倍。但由于每個鋸齒在X方向和Y方向都只有低分辨率的一半,所以效果看起來會好一些,這種改進方法是以4倍的存儲器代價和4倍的掃描轉(zhuǎn)換時間獲得的。因此增加分辨率是不經(jīng)濟的方法,它只能減輕,不能消除鋸齒。(2)簡單的區(qū)域取樣在直線掃描算法假定象素是數(shù)學(xué)上的一個點,象素的顏色是由對應(yīng)于象素中心的圖形中一點的顏色決定的。但是,實際上象素不是一個點,而是一個有限區(qū)域。屏幕上所畫的直線段不是數(shù)學(xué)意義上的無寬度的理想線段,而是一個寬度至少為一個象素單位的線條。因此,把屏幕上的直線看成是長方條形更為合理。在繪制直線條時,所有與該長方條相交的象素都采用適當(dāng)?shù)膶挾冉o予顯示。這要求顯示器各象素可以用多灰度顯示。例,設(shè)象素中心是在網(wǎng)格點上的不相交的正方形,象素的灰度與它落在直線條內(nèi)的面積成正比。在多灰度黑白顯示器上,若一個象素整個落在線條上,則將它置成前景色。若一個象素與線條部分相交,根據(jù)相交部分的大小來選擇不同的灰度,相交部分大的象素前景色成分更多一些,相交部分小的象素前景色成分更少一些。這種方法將產(chǎn)生模糊的邊界,以此來減輕鋸齒效應(yīng)。在實際應(yīng)用中,常采用盒式濾波器(3)加權(quán)區(qū)域取樣加權(quán)區(qū)域取樣方法采用更為優(yōu)化的圓錐形濾波器。圓錐的底圓中心在當(dāng)前象素中心,底圓半徑為一個單位,錐高為1。當(dāng)直線條經(jīng)過該象素時,該象素的灰度值是在二者相交區(qū)域上對濾波器進行積分的積分值。用這種圓錐形濾波器有如下特點:一是接近理想直線的象素將被分配更多的灰度值。二是相鄰兩個象素的濾波器相交,所以直線條經(jīng)過該相交區(qū)域時,將對這兩個象素分配給適當(dāng)?shù)幕叶戎?,這有利于縮小直線條上相鄰象素的灰度差。第二章:P1281、為什么要制定和采用計算機圖形標準?已經(jīng)ISO批準的計算機圖形標準軟件有哪些?為了提高計算機圖形軟件、計算機圖形的應(yīng)用軟件以及相關(guān)軟件的編程人員在不同的計算機和圖形設(shè)備之間的可移植性。已獲ISO批準的計算機圖形標準軟件有:l計算機圖形核心系統(tǒng)(GKS)及其語言聯(lián)編l程序員層次交互式圖形系統(tǒng)(PHIGS)及其語言聯(lián)編l三維圖形核心系統(tǒng)(GKS-3D)及其語言聯(lián)編l計算機圖形元文件(CGM)l計算機圖形接口(CGI)l基本圖形轉(zhuǎn)換規(guī)范(IGES)l產(chǎn)品數(shù)據(jù)轉(zhuǎn)換規(guī)范(STEP)等2、CGI標準的主要功能是什么?試用CGI中的圖形輸出功能繪制一副機械零件圖。CGI的目的是提供控制圖形硬件的一種與設(shè)備無關(guān)的方法,它可以看成是圖形設(shè)備驅(qū)動程序的一種標準。CGI在用戶程序和虛擬設(shè)備之間,以一種獨立于設(shè)備的方式提供圖形信息的描述和通信,使有經(jīng)驗的用戶最大限度地、靈活地直接控制圖形設(shè)備。它所提供的功能集包括:l控制功能集l獨立于設(shè)備的圖形對象輸出功能集l圖段功能集l輸入和應(yīng)答功能集l產(chǎn)生修改、檢索和顯示以像素數(shù)據(jù)形式存儲的光柵功能集3、CGM對文件管理的存儲結(jié)構(gòu)是采用何種形式?你認為應(yīng)用這種結(jié)構(gòu)有什么優(yōu)缺點?采用生成多個與設(shè)備無關(guān)的圖形定義,提供隨機存取、傳送、簡潔定義圖象的圖形生成元文件的存儲結(jié)構(gòu),它不是應(yīng)用程序員的標準,而是為系統(tǒng)和系統(tǒng)開發(fā)而設(shè)計的,與CGI配套供用戶使用。優(yōu)點是:它具有通用性,即CGM應(yīng)能廣泛適應(yīng)各種設(shè)備、應(yīng)用系統(tǒng)。例如同一個文件即可在低分辯率的單色圖形終端上輸出,也可在高分辨率的多筆繪圖儀上輸出,或在高性能的光柵圖形顯示器上輸出。這種結(jié)構(gòu)的缺點是:它只是一個靜態(tài)的圖形生成元文件,即它不能產(chǎn)生和定義圖形的動態(tài)效果,例如不能實現(xiàn)動態(tài)的幾何變換。4、GKS、PHIGS、GI在應(yīng)用程序中起的作用?試比較它們在輸入輸出功能上的相同和不同之處?GKS在應(yīng)用程序和圖形輸入輸出設(shè)備之間提供了功能接口,包括:控制功能、輸出功能、輸出屬性、變換功能、圖段功能、輸入功能、詢問功能、實用程序、元文件處理和出錯處理。PHIGS向應(yīng)用程序提供控制圖形設(shè)備的圖形系統(tǒng)接口,能夠在系統(tǒng)中高效率地描述應(yīng)用模型,迅速地修改圖形模型的數(shù)據(jù);并能夠繪制顯示修改后的圖形模型。GL是工作站或UNIX上廣泛應(yīng)用的一個工業(yè)標準圖形程序庫,和PHIGS同樣是提供用戶與程序圖形系統(tǒng)接口。包括基本圖素、坐標變換、設(shè)置屬性和顯示方式、輸入/輸出處理、真實圖形顯示。相同點:三個都是提供用戶與輸入輸出設(shè)備之間的圖形系統(tǒng)接口的標準圖形程序庫。不同點:不同的數(shù)據(jù)結(jié)構(gòu)可修改性屬性的存儲輸出流水線等具體而言:lGKS有6種輸入功能和6種輸出圖素,在輸入功能上可對各種設(shè)備初始化,設(shè)定設(shè)備工作方式、確定請求采樣和事件輸入;在輸出功能上,可確定輸出圖形的類型lPHIGS的輸出流水線有5個坐標系;具有高度的動態(tài)性、輸出交互性的三維圖形,可以在系統(tǒng)中高效率地描述應(yīng)用模型,迅速修改圖形模型的數(shù)據(jù),并能繪制顯示修改后的圖形模型lGL的輸入/輸出處理用于啟動輸入輸出設(shè)備,并對相應(yīng)的事件隊列進行處理,提供了更豐富的圖元,如各種曲面。6、GKS-3D與PHIGS的主要區(qū)別是什么?用GKS-3D輸出圖形的過程是什么?主要區(qū)別:(1)數(shù)據(jù)結(jié)構(gòu)GKS-3D:提供了單層、平面的圖形數(shù)據(jù)結(jié)構(gòu)其圖段用來表示的是圖象信息而不是圖形的構(gòu)造信息,其圖段數(shù)據(jù)經(jīng)過坐標規(guī)格化變換后,不再是定義該圖段的坐標空間的數(shù)據(jù)PHIGS:其結(jié)構(gòu)始終是在造型空間中定義的數(shù)據(jù)(2)可修改性GKS-3D:產(chǎn)生的圖段,其內(nèi)容不能修改,但影響圖段整體特征的某些屬性,如可見性、可檢測性、圖段的幾何變換等是可以修改PHIGS:其任何結(jié)構(gòu),結(jié)構(gòu)中的任何一部分元素則可以在任何時候進行修改(3)屬性的存儲GKS-3D:把圖素屬性和圖素一起存入圖形數(shù)據(jù)結(jié)構(gòu)中,為了修改某圖段中某個圖素的屬性,必須去除該圖素的舊屬性,重新生成一個新屬性PHIGS:只要當(dāng)遍歷一個結(jié)構(gòu)并要顯示該結(jié)構(gòu)時,其中的圖素才能變成輸出圖素,此時,那些屬性結(jié)構(gòu)元素是靈活的,圖形數(shù)據(jù)的修改也是容易的。(4)輸出流水線GKS-3D:采用三種坐標系,用戶坐標系、設(shè)備坐標系和規(guī)格化設(shè)備坐標系PHIGS:采用五種坐標系,造型坐標系、用戶坐標系、觀察坐標系、規(guī)格化的投影(空間)坐標系、設(shè)備坐標系過程:圖素→規(guī)格化變換→圖段變換→規(guī)格化裁減→視圖變換→裁減操作和視圖映象→工作站裁剪和變換→顯示輸出10、IGES和STEP有什么共同點和不同點?共同點:IGES和STEP都是與CAD/CAM系統(tǒng)提供中性產(chǎn)品數(shù)據(jù)的公共資源和應(yīng)用模型,它涉及到土建工程、機械、結(jié)構(gòu)、電氣、電子工程及船舶結(jié)構(gòu)等領(lǐng)域,為了解決數(shù)據(jù)在不同的CAD/CAM系統(tǒng)之間進行數(shù)據(jù)傳送的問題,定義了一套表示CAD/CAM系統(tǒng)中常用的幾何和非幾何數(shù)據(jù)格式以及相應(yīng)的文件結(jié)構(gòu)。不同點:IGES是1982年ANSI標準,而STEP是ISO/IECJTCL下的SC4開發(fā)的ISO標準,它克服了IGES的一些缺點:(1)不能精確地完整地轉(zhuǎn)換數(shù)據(jù),其原因是不同的CAD/CAM系統(tǒng)之間許多概念不一樣,使得某些定義數(shù)據(jù)像表面定義數(shù)據(jù)會丟失(2)不能轉(zhuǎn)換屬性信息(3)層信息常丟失(4)不能把兩個零部件的信息放在一個文件中(5)產(chǎn)生的數(shù)據(jù)量太大,以至許多CAD系統(tǒng)難以處理(無論是時間還是存儲容量上都不適應(yīng))(6)在轉(zhuǎn)換數(shù)據(jù)的過程發(fā)生的錯誤很難確定,常常需要人工去處理IGES文件,對此要花費大量的時間和精力。而STEP克服了IGES中存在的問題,擴大了轉(zhuǎn)換CAD/CAM系統(tǒng)中幾何拓撲數(shù)據(jù)的范圍,STEP即產(chǎn)品模型數(shù)據(jù)的公共資源和應(yīng)用模型。STEP的產(chǎn)品模型數(shù)據(jù)是覆蓋產(chǎn)品整個生命周期的應(yīng)用而全面定義的產(chǎn)品所有數(shù)據(jù)元。在STEP中采用了形狀特征信息模型進行各種產(chǎn)品模型定義數(shù)據(jù)的轉(zhuǎn)換,強調(diào)建立能存入數(shù)據(jù)庫中的一個產(chǎn)品模型的完整表示,而不只是它的圖形或可視的表示IGES采用了對實體單元進行數(shù)據(jù)描述的文件結(jié)構(gòu),而STEP采用了形狀特征信息模型進行各種產(chǎn)品模型定義數(shù)據(jù)的轉(zhuǎn)換的概念模式;IGES的文件格式為目錄入口、參數(shù)節(jié)、整體節(jié)、結(jié)束節(jié)和定義信息5個節(jié);STEP的產(chǎn)品信息分為應(yīng)用層、邏輯層和物理層3個層結(jié)構(gòu)。第三章:P1631、你所用的圖形軟件是屬于子程序庫、專業(yè)語言和交互命令,還是這三種形式的混合形式,或是其他的形式。你認為你所用的圖形軟件的成功和不足之處是什么?有哪些改進意見?(1)使用的圖形軟件采用C語言作為主語言,屬于子程序庫、專用語言和交互命令混合;(2)成功之處:使用方便、便于擴充、便于用戶加入用戶自己編寫的源程序或目標代碼;不足之處是格式隨所用主語言格式而定,修改源程序比較麻煩;(3)實現(xiàn)與其他語言(非主語言)的兼容運行,交互式修改運行結(jié)果,而不需要人為地查看、修改源程序。2、面向應(yīng)用程序的接口通常有哪幾種形式?你認為哪一種形式更方便應(yīng)用和擴充應(yīng)用功能?面向應(yīng)用程序的接口有子程序庫、專用語言和交互命令三種形式;交互任務(wù)是用戶最關(guān)注的事,交互技術(shù)是完成交互任務(wù)的手段,故交互命令是用戶接口中應(yīng)用最普遍、效率最高的一種形式,對交互設(shè)備、交互任務(wù)、交互技術(shù)以及控制方式等的綜合處理是完成交互命令和實現(xiàn)交互命令的依據(jù)。總的來說,交互命令更方便應(yīng)用和擴充應(yīng)用功能。3、請列出你所用的交互系統(tǒng)中所涉及到的交互任務(wù)和交互技術(shù),是否有本章書中沒有提及的交互任務(wù)和交互技術(shù)?若有,能否對其進行分解,使之和本章書中介紹的交互任務(wù)和交互技術(shù)相匹配。就目前有用過的交互任務(wù)和交互技術(shù)而言,均在本章范圍內(nèi);(1)交互任務(wù):區(qū)域選擇、文本輸入、定路徑和控制(2)交互技術(shù):選擇技術(shù)、定位技術(shù)、定路徑技術(shù)、文本技術(shù)、徒手畫技術(shù)和拖動技術(shù)。6、常見的交互任務(wù)有哪幾種?你認為哪一種交互任務(wù)最難完成?常見的交互任務(wù)有8種定位、選擇、文本、定向、定路徑、定量、三維交互任務(wù)、組合交互任務(wù)其中三維交互任務(wù)和組合交互任務(wù)最難完成,因為三維交互任務(wù)涉及定位、選擇和旋轉(zhuǎn),用戶難以區(qū)分屏幕上游標選擇到對象的深度值和其他顯示對象的深度值。組合交互任務(wù)主要包含對話框、構(gòu)造和動態(tài)控制三種,其實現(xiàn)前面幾種的結(jié)合,是動態(tài)的,故其完成難度最大。7、常見的交互技術(shù)有哪幾種?你認為哪一種交互技術(shù)最容易使用?交互技術(shù)指通過計算機輸入、輸出設(shè)備,以有效的方式實現(xiàn)人與計算機對話的技術(shù)。它包括機器通過輸出或顯示設(shè)備給人提供大量有關(guān)信息及提示請示等,人通過輸入設(shè)備給機器輸入有關(guān)信息及提示請示等,人通過輸入設(shè)備給機器輸入有關(guān)信息,回答問題等。人機交互技術(shù)是計算機用戶界面設(shè)計中的重要內(nèi)容之一。它與認知學(xué)、人機工程學(xué)、心理學(xué)等學(xué)科領(lǐng)域有密切的聯(lián)系。常見的交互技術(shù)有:選擇技術(shù)、定位技術(shù)、定向技術(shù)、定路徑技術(shù)、定量技術(shù)、文本技術(shù)、橡皮筋技術(shù)、徒手畫技術(shù)、拖動技術(shù);其中定量技術(shù)最容易使用。11、交互式用戶接口常見的工作方式有幾種?你認為哪一種較實用?用戶接口工具箱使你能夠為你的應(yīng)用程序建立復(fù)雜的用戶接口。用戶接口可以包括窗口、對話、菜單條、附件(域、列表框,等等)、標記和公用對話(文件選擇對話、信息對話,等等)。用戶接口工具箱包括各種公用對話,例如選擇一個文件或顯示錯誤信息的對話。為了使用一個公用的對話,只需簡單地實例化它,設(shè)置合適的參數(shù),以及把它連接到你的應(yīng)用程序中。固定域輸入輸出方式問答方式表處理方式命令語言菜單方式圖形符號方式12、請用菜單驅(qū)動方式、數(shù)據(jù)表格驅(qū)動方式和事件驅(qū)動方式完成同一個實際的交互任務(wù)。并比較它們之間的難易程度和工作量。事件驅(qū)動的真實工作過程數(shù)據(jù)表格驅(qū)動方式:程序和表格關(guān)聯(lián),用表格(如EXCEL)的形式將變量傳遞到程序中進行一系列操作,或再用表格輸出,不同于消息驅(qū)動的WINDOWS程序機制。使用表格驅(qū)動建立菜單,可以很方便很簡單地管理自定義菜單,節(jié)約開發(fā)與維護成本?!短窖蟊kU終端系統(tǒng)》交易界面實現(xiàn)了參數(shù)化的配置方式,系統(tǒng)使用屏幕定義文件和表格定義文件來定義交易屏幕,表格定義文件定義了表格的基本屬性和表格的列,屏幕定義文件定義了屏幕的基本屬性和屏幕上的欄位和表格的位置。屏幕和表格定義文件都需要引用數(shù)據(jù)字典里面的欄位定義。界面驅(qū)動包括屏幕驅(qū)動和表格驅(qū)動,其功能包括設(shè)置欄位缺省值和缺省屬性(是否可輸入、是否必輸入、是否綁定下拉菜單pklist),響應(yīng)各種系統(tǒng)事件(屏幕前后事件、欄位前后事件、最后欄位后事件等),響應(yīng)熱鍵(ESC、DEL、PAGEUP、PAGEDOWN、CTRL_XX等),動態(tài)改變屏幕屬性(多頁顯示的翻頁、拆分屏幕等),發(fā)起二段式交易等等。屏幕驅(qū)動和表格驅(qū)動是提供給開發(fā)人員的統(tǒng)一接口,開發(fā)人員通過實現(xiàn)該接口的方式開發(fā)功能模塊。事件驅(qū)動方式:1、啟動應(yīng)用程序,裝載和顯示窗體,產(chǎn)生Form_Load和Form_Show事件2、窗體或窗體上的控件接收事件,事件可由用戶引發(fā)(例如鍵盤或鼠標操作),可由系統(tǒng)引發(fā)(例如定時器事件),也可由代碼間接引發(fā)(例如當(dāng)代碼裝載其他窗體時產(chǎn)生的Load事件)3、如果在相應(yīng)的事件過程中存在代碼,就執(zhí)行代碼4、應(yīng)用程序等待下一次事件例:.獲取和修改計算機名字的方法1.)插入一個新模塊,在其中添加如下代碼:′聲明GetComputerNameDeclareFunctionGetComputerNameLib〃kernel32〃Alias〃GetComputerNameA〃(ByvallpBufferAsString,nSizeAsLong)AsLong′聲明SetComputerNameDeclareFunctionSetComputerNameLib〃kernel32〃Alias〃SetComputerNameA〃(ByvallpComputerNameAsString)AsLong′定義一個獲取計算機名字的函數(shù)PublicFunctionGetCName(CName)AsBooleanDimsComputerNameAsString?計算機的名字DimlComputerNameAsLong?計算機名字的長度DimlResultAsLong?GetComputerName的返回值DimRVAsBoolean′GetCName返回值,若為TRUE則表示操作成功lComputerNameLen=256sComputerName=Space(lComputerNameLen)lResult=GetComputerName(sComputerName,lCompputerNameLen)IflResult〈〉0ThenCname=Left$(sComputerName,lComputerNameLen)RV=TrueElseRV=FalseEndIfGetCName=RVEndFunction′定義一個修改計算機名字的函數(shù)PublicFunctionSetCName(CName)AsBooleanDimlResultAsLongDimRVAsBooleanlResult=SetComputerName(CName)IflResult〈〉0ThenRV=True′修改成功ElseRV=FalseEndIfSetCName=RVEndFunction2).在窗體中添加一命令按鈕Command1,雙擊該按鈕并在其中添加如下代碼:SubCommand1-Click()DIMCNASStringx=GetCName(CN)Print〃ThisComputerNameis:〃,CNCN=〃MYCOMPUTER〃x=SetCName(CN)Print〃NowtheComputernameis:〃,CNEndSub1)對于完成同一個實際的任務(wù)來說,一般而言菜單驅(qū)動方式較數(shù)據(jù)表格驅(qū)動方式和事件驅(qū)動方式容易2)相對于用戶的工作量來說,菜單驅(qū)動方式較數(shù)據(jù)表格驅(qū)動方式和事件驅(qū)動方式的工作量大。第四章:P2151、將中點畫線算法推廣以便能畫出任意斜率的直線算法設(shè)計:(1)輸入直線的起點坐標P0(x0,y0)和終點坐標P1(x1,y1).(2)定義直線當(dāng)前點坐標x和y,定義中點偏差判別式d、直線斜率k、像素點顏色rgb(3)x=x0,y=y0計算d=0.5-k,k=(y1-y0)/(x1-x0),rgb=RGB=(0,0,255).(4)繪制點(x,y),判斷d的符號,若d<0,則(x,y)更新為(x+1,y+1),d更新為d+1-k,否則(x,y)更新為(x+1,y),d更新為d-k.(5)如果當(dāng)前點x小于(x1,重復(fù)步驟(4),否則結(jié)束。程序主要代碼:MidPointLine(x0,y0,x1,y1,color){inta,b,delta1,delta2,d,x,y;a=y0–y1;b=x1–x0;d=2*a–b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;if(a<b)drawpixel(x,y,color);elsedrawpixel(y,x,color);while(x>x1){If(d<0){x++;y++;d+=delta2;}Else{X++;D+=delta1;}Putpixel(x,y,color);}ElseWhile(x<x1){If(d<0){x--;y++;d-=delta3;}Else{x--;d-=delta1;}Putpixel(x,y,color);}}2、采用整數(shù)Bresenham算法,為一臺計算機編制直線掃描轉(zhuǎn)換程序。從鍵盤敲入兩端點坐標,就能在顯示器屏幕上畫出對應(yīng)的直線。VoidDrawLine(intcolor){intx0,y0,x1,y1,color,I;scanf(“%d,%d,%d,%d”,&x0,&y0,&x1,&y1);dx=x1–x0;dy=y1–y0;e=-dx;x=x0;y=y0;for(i=0;i<=dx;i++){putpixel(x,y,color);x=x+1;e=e+2*dy;if(e>=0){y=y+1;e=e–2*dy;}}}4、試編寫按逆時針方向生成第二個8分圓的中點算法算法設(shè)計:(1)輸入圓的半徑(2)定義圓當(dāng)前點坐標x和y、中點偏差判別式d、像素點顏色rgb(3)計算d=1.25-R,x=0,y=R,rgb=RGB=(0,0,255).(4)繪制點(x,y),及其在八分圓中的另外7個對稱點?(5)判斷d的符號,若d<0,則(x,y)更新為(x+1,y),d更新為d+2x+3,否則(x,y)更新為(x+1,y-1),d更新為d+2(x-y)+5.(6)當(dāng)x小于等于y,重復(fù)步驟(4)和(5),否則結(jié)束。MidpointCircle(r,color)intr,color;{floatx,y;floatd;x=0;y=r;d=1.25–r/1.414;drawpixel(x,y,color);while(x<y){if(d<0){d+=2*x+3;x++;}else{d+=5+2*(x-y);x++;y--;}drawpixel(x,y,color);}}5、假設(shè)圓的圓心不在原點,試編寫算法對整個圓進行掃描轉(zhuǎn)換算法設(shè)計:(1)輸入圓的半徑r,圓心坐標為(xc,yc)(2)定義圓當(dāng)前點坐標x和y、中點偏差判別式d、像素點顏色rgb(3)計算d=1.25-R,x=0,y=R,rgb=RGB=(0,0,255).(4)繪制點(x+xc,y+yc),及其在八分圓中的另外7個對稱點?(5)判斷d的符號,若d<0,則(x,y)更新為(x+1,y),d更新為d+2x+3,否則(x,y)更新為(x+1,y-1),d更新為d+2(x-y)+5.(6)當(dāng)x小于等于y,重復(fù)步驟(4)和(5),否則結(jié)束。(1)用bresenham畫圓法,設(shè)圓心坐標為(xc,yc)bresenham_circle(r,color)intr,color;{intx,y,delta,delta1,delta2,direction;x=xc;y=yc+r;delta=2*(1-r);while(y>=0){drawpixel(x,y,color);if(delta<0){delta1=2*(delta+y-b)-1;if(delta1<=0)direction=1;elsedirection=2;}elseif(delta>0){delta2=2*(delta-x+xc)-1;if(delta2<=0)direction=2;elsedirection=3;}elsedirection=2;switch(direction){case1:x++;delta+=2*(x-xc)+1;break;case2:x++;y++;delta+=2*(x-a-y+yc+1);break;case3:y--;delta+=-2*(y-yc)+1;break;}}}(2)采用中點畫圓算法#include<stdio.h>#include<conio.h>#include<graphics.h>MidpointCircle(r,color)intr,color;{floatx,y;floatd;x=0;y=r;d=1.25–r/1.414;putpixel(xc+x,yc+y,color);while(x<y){if(d<0){d+=2*x+3;x++;}else{d+=5+2*(x-y);x++;y--;}putpixel(xc+x,yc+y,color);}}putpixel(x,y,color);putpixel(xc+yc-y,yc+xc-x,color);putpixel(xc+yc-y,yc+xc-x,color);putpixel(x,yc+yc-y,color);putpixel(xc+xc-x,yc+yc-y,color);putpixel(xc-yc+y,yc-xc+x,color);putpixel(xc-yc+y,yc+xc-x,color);putpixel(xc+xc-x,y,color);}voidmain(){intgdriver=DETECT,gmode,xc,yc,r;initgraph(&gdriver,&gmode,“”);printf(“Pleaseenterthexc:”);scanf(“%d”,&xc);printf(“Pleaseentertheyc:”);scanf(“%d”,&yc);printf(“PleaseentertheR:”);scanf(“%d”,&r);cleardevice();MidpointCircle(xc,yc,r,RED);getch();closegraph();}6、試編寫可以對一段任意圓弧進行掃描轉(zhuǎn)換的算法將360度的區(qū)域分成8個部分32415867編寫可以對一段任意圓弧進行掃描轉(zhuǎn)換的算法的關(guān)鍵在于,對這段圓弧的起點和終點分別判定是否在同一區(qū)域如果起點和終點在同一區(qū)域,調(diào)用中點畫圓算法,但要根據(jù)實際情況對參數(shù)進行修正;如果起點和終點不在同一區(qū)域,則要根據(jù)實際情況對圓弧段進行分割,分割的原則是將每一段的起點和終點放在同一區(qū)域,然后分別調(diào)用中點畫圓算法畫圓弧,同樣在畫的過程中,要根據(jù)實際情況對參數(shù)進行修正及算法進行修正;設(shè)圓弧的起點為(x1,y1),終點為(x2,y2),半徑為r如圖A(x1,y1)D(x0-r,y0)C(x0,y0)B(x2,y2)將整個圓弧分為兩段,弧AC和弧CB,分別進行掃描轉(zhuǎn)換,轉(zhuǎn)換過程中利用中點畫圓方法進行,代碼如下:midpoint(x1,y1,x2,y2,r,color,k){intx,y;floatd;x=x1;y=y1;d=(x1+1)^2+(y1-0.5)^2-r^2;putpixel(x,y,color);while(x<=x2){if(d<0){d+=2*x+3;x++;}else{d+=2*(x-y)+5;x++;y=y+k;}}putpixel(x,y,color);main(){scanf(“%d”,&n);//分割的圓弧數(shù)for(i=1;i<=n;i++){scanf(“%d,%d,%d,%d,%d”,&x1,&y1,&x2,&y2,,&k);//要求x1<x2midpoint(x1,y1,x2,y2,r,color,k);7、設(shè)計一個多邊形區(qū)域填充算法,使其邊界像素具有一個值,而內(nèi)部的像素具有另一個值。算法設(shè)計:(1)使用畫線語句繪制多邊形(2)計算窗口客戶區(qū)的水平邊界最大值MaxX和垂直邊界最大值MaxY(3)調(diào)用系統(tǒng)調(diào)色板,設(shè)置顏色值FillColor為調(diào)色板上取得的顏色,CBackColor為白色。(4)對于每一條邊,y從ymin開始,執(zhí)行下面的循環(huán)。(5)x從掃描線和邊的交點處開始到窗口客戶區(qū)右邊界,先獲得(x,y)位置的像素顏色,如果是填充色,則置成背景色,否則所有填充色填充。執(zhí)行x=x+1/k,計算下一個x起點值。(6)如果y=ymin,則掃描結(jié)束,否則y++,轉(zhuǎn)(5)。主要代碼:intMaxX,MaxY;VoidGetMaxX()//求屏幕最大x值{CRectrect;GetClientRect(rect);MaxX=rect.riht;}VoidGetMaxY()//求屏幕最大y值{CRectrect;GetClientRect(rect);MaxX=rect.bottom;}VoidDraw()//填充多邊形函數(shù){COLORREFCBackColor=RGB(255,255,255);//白色CClientDCdc(this);intm,n,ymin,ymax;doublex,y,k;for(inti=0;i<=6;i++){m=i,n=i+1;if(7==n)n=0;k=(double(Point[m].x-Point[n].x)/(Point[m].y-Point[n].y);//計算1/k;if((Point[m].y<Point[n].y)//得到每條邊y的最大和y最小值{ymin=Point[m].y;ymax=Point[n].y;x=Point[m].x;//得到x|ymin}else{ymin=Point[n].y;ymax=Point[m].y;x=Point[n].x;}For(y=ymin;y<ymax;y++){For(intj=ROUND(x);j<MaxX;j++)//對每一條掃描線與邊的交點的右側(cè)像素循環(huán){If(dc.GetPixel(j,ROUND(y)==FillColor)//如果像素的顏色是填充色{dc.SetPixel(j,ROUND(y),CBackColor);//改為背景色}else{dc.SetPixel(j,ROUND(y),FillColor);//改為填充色}}x+=k;//計算下一個x起點值}}}DrawPolygon()//繪制多邊形函數(shù){CClientDCdc(this);intm,n;for(intj=0;j<=6;j++){M=j;n=j+1;If(7==n)n=0;dc.MoveTo(Point[m]);dc.LineTo(Point[n]);}}10、試設(shè)計一個生成具有寬度的直線條的算法,使得在直線條連接處不出現(xiàn)圖示的缺口對于第一種方案:cdeabf可以把整個線條分成兩個部分,對于左半部分:先計算出線條的四個頂點,a,b,c,d再用直線段把相鄰角點連接起來,最后調(diào)用多邊形填充算法把所得的四邊形進行填色同樣,對于右半部分,依法處理對于第二種方案:cedfgabh可以把整個線條分成三個部分,對于左半部分:先計算出線條的四個頂點,a,b,c,d再用直線段把相鄰角點連接起來,最后調(diào)用多邊形填充算法把所得的四邊形進行填色對于中間部分:先計算出線條的四個頂點,c,d,e,f再用半徑為某個值如R圓弧分別把c,e和d,f連接起來,最后調(diào)用區(qū)域填充算法把所得的圓環(huán)段c,e,d,f進行填色同樣,對于右半部分,依法處理先計算出線條的四個頂點,e,f,g,h再用直線段把相鄰角點連接起來,最后調(diào)用多邊形填充算法把所得的四邊形進行填色12、為26個英文大寫字母設(shè)計5X7的字符掩膜矩陣。13、編寫一程序?qū)崿F(xiàn)線段裁剪的中點分割算法算法設(shè)計:(1)輸入直線段的兩端點坐標:P0(x0,y0),P1(x1,y1)繪制坐標為(wxl,wyt),(wxr,wyb)的窗口(2)P0點的編碼為RC0,P1點的編碼為RC1。(3)若RC0|RC1=0,對直線段應(yīng)“取”,轉(zhuǎn)步驟(6);否則若RC0|RC1≠0,對直線段應(yīng)“棄”,轉(zhuǎn)步驟(6)。(4)如果直線段有一個端點在窗口內(nèi),則計算該直線的中點坐標P[x=(x0+x1)/2,y=(y0+y1)/2],并計算其編碼RC。如果中點P和P0在規(guī)定的誤差范圍內(nèi)(例如10-6)不重合,則判斷中點是否也在窗口內(nèi),如果在,PP0“取”之,否則,PP0“棄”之。將中點P賦給點P1,轉(zhuǎn)步驟(6)。(5)如果直線段的兩個端點都不在窗口內(nèi),則必定與窗口相交,求該直線中點坐標P[x=(x0+x1)/2,y=(y0+y1)/2]和其編碼RC。當(dāng)中點P在窗口外時,如果RC0&RC1=0,則PP1在窗口外,“棄”之;否則PP0在窗口外,“棄”之,直到中點P在窗口內(nèi)。對于中點在窗口內(nèi)的直線段PP1和PP0,重復(fù)步驟(4)。(6)輸出裁減后的線段。主要代碼:VoidMidClip(doubleP0x,doubleP0y,doubleP1x,doubleP1y,BOOLflag){Doublex,y;UnsignedintRCT0,RCT1;RCT0=EnCode(P0x,P0y);RCT1=EnCode(P1x,P1y);x=(P0x+P1x)/2;y=(P0y+P1y)/2;RCT=EnCode(x,y);while(abs(x-P0x)>1e-6||abs(y-P0y)>1e-6){if(RCT==0)//中點也在窗口內(nèi),則P=P0{P0x=x;P0y=y;RCT0=RCT;}else//否則舍棄P1點{P1x=x;P1y=y;RCT1=RCT;}x=(P0x+P1x)/2;y=(P0y+P1y)/2;RCT=EnCode(x,y);}if(flag==true){Pointx[1]=x;Pointy[1]=y;}else{Pointx[0]=x;Pointy[0]=y;}}14編寫一程序?qū)崿F(xiàn)逐次多邊形裁剪算法算法設(shè)計:(1)輸入第一個頂點坐標:F(x0,y0)第二個頂點坐標:S(x1,y1)(2)當(dāng)頂點輸入完畢,轉(zhuǎn)(7)(3)輸入頂點P坐標:P(x2,y2)(4)SP與裁剪線相交嗎?是,求SP與裁剪線的交點I(x,y),并輸出I坐標:I(x,y)(5)P位于可見一側(cè)嗎?是,輸出頂點P坐標:P(x2,y2)(6)將頂點P坐標:P(x2,y2)=》頂點S坐標:S(x1,y1),轉(zhuǎn)(2)(7)將頂點F坐標:F(x0,y0)=》頂點P坐標:S(x2,y2),形成閉合,(8)SP與裁剪線相交嗎?是,求SP與裁剪線的交點I(x,y),并輸出I坐標:I(x,y)(9)P位于可見一側(cè)嗎?是,輸出頂點P坐標:P(x2,y2)(10)結(jié)束程序代碼:/*Sutherland-Hodgman算法*/#defineLENsizeof(structnode)#include<math.h>#include"display.h"structnode{intdx,dy;structnode*next;};structnode*creat(){structnode*h,*q,*r;intp[8][2]={100,120,160,50,180,100,200,80,240,160,210,220,170,160,140,190};inti;setcolor(12);for(i=0;i<7;i++)line(p[i][0],p[i][1],p[i+1][0],p[i+1][1]);line(p[0][0],p[0][1],p[7][0],p[7][1]);rectangle(120,200,230,70);h=NULL;for(i=0;i<8;i++){q=(structnode*)malloc(LEN);q->dx=p[i][0];q->dy=p[i][1];if(h==NULL)h=q;elser->next=q;r=q;}r->next=NULL;return(h);}structnode*builx(h,x)structnode*h;intx;{ints[2],j[2];structnode*hh,*p,*r,*q;intmax,min;p=h;hh=NULL;s[0]=p->dx;s[1]=p->dy;p=p->next;while(p!=NULL){j[0]=x;j[1]=s[1]+(p->dy-s[1])*(x-s[0])/(p->dx-s[0]);max=s[0];min=p->dx;if(s[0]<p->dx){max=p->dx;min=s[0];}if((j[0]>=min)&&(j[0]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dx>=x){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}s[0]=p->dx;s[1]=p->dy;p=p->next;}p=h;j[0]=x;j[1]=s[1]+(p->dy-s[1])*(x-s[0])/(p->dx-s[0]);max=s[0];min=p->dx;if(s[0]<p->dx){max=p->dx;min=s[0];}if((j[0]>=min)&&(j[0]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dx>=x){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}r->next=NULL;return(hh);}structnode*builxx(h,x)structnode*h;intx;{ints[2],j[2];structnode*hh,*p,*r,*q;intmax,min;p=h;hh=NULL;s[0]=p->dx;s[1]=p->dy;p=p->next;while(p!=NULL){j[0]=x;j[1]=s[1]+(p->dy-s[1])*(x-s[0])/(p->dx-s[0]+0.1);max=s[0];min=p->dx;if(s[0]<p->dx){max=p->dx;min=s[0];}if((j[0]>=min)&&(j[0]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dx<=x){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}s[0]=p->dx;s[1]=p->dy;p=p->next;}p=h;j[0]=x;j[1]=s[1]+(p->dy-s[1])*(x-s[0])/(p->dx-s[0]+0.1);max=s[0];min=p->dx;if(s[0]<p->dx){max=p->dx;min=s[0];}if((j[0]>=min)&&(j[0]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dx<=x){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}r->next=NULL;return(hh);}structnode*buily(h,y)structnode*h;inty;{ints[2],j[2];structnode*hh,*p,*r,*q;intmax,min;p=h;hh=NULL;s[0]=p->dx;s[1]=p->dy;p=p->next;while(p!=NULL){j[1]=y;j[0]=s[0]+(p->dx-s[0])*(y-s[1])/(p->dy-s[1]+0.1);max=s[1];min=p->dy;if(s[1]<p->dy){max=p->dy;min=s[1];}if((j[1]>=min)&&(j[1]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dy>=y){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}s[0]=p->dx;s[1]=p->dy;p=p->next;}p=h;j[1]=y;j[0]=s[0]+(p->dx-s[0])*(y-s[1])/(p->dy-s[1]+0.1);max=s[1];min=p->dy;if(s[1]<p->dy){max=p->dy;min=s[1];}if((j[1]>=min)&&(j[1]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dy>=y){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}r->next=NULL;return(hh);}structnode*builyy(h,y)structnode*h;inty;{ints[2],j[2];structnode*hh,*p,*r,*q;intmax,min;p=h;hh=NULL;s[0]=p->dx;s[1]=p->dy;p=p->next;while(p!=NULL){j[1]=y;j[0]=s[0]+(p->dx-s[0])*(y-s[1])/(p->dy-s[1]+0.1);max=s[1];min=p->dy;if(s[1]<p->dy){max=p->dy;min=s[1];}if((j[1]>=min)&&(j[1]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dy<=y){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}s[0]=p->dx;s[1]=p->dy;p=p->next;}p=h;j[1]=y;j[0]=s[0]+(p->dx-s[0])*(y-s[1])/(p->dy-s[1]+0.1);max=s[1];min=p->dy;if(s[1]<p->dy){max=p->dy;min=s[1];}if((j[1]>=min)&&(j[1]<=max)){q=(structnode*)malloc(LEN);q->dx=j[0];q->dy=j[1];if(hh==NULL)hh=q;elser->next=q;r=q;}if(p->dy<=y){q=(structnode*)malloc(LEN);q->dx=p->dx;q->dy=p->dy;if(hh==NULL)hh=q;elser->next=q;r=q;}r->next=NULL;return(hh);}main(){intmax,min;structnode*head,*r,*q;inti;ints[2];Initialize();head=creat();q=head;while(q->next!=NULL){putpixel(q->dx,q->dy,14);q=q->next;}putpixel(q->dx,q->dy,14);/*左邊界進行裁減*/q=builx(head,120);head=q;while(q->next!=NULL){putpixel(q->dx,q->dy,15);q=q->next;}putpixel(q->dx,q->dy,15);/*上邊界進行裁減*/q=buily(head,70);head=q;while(q->next!=NULL){putpixel(q->dx,q->dy,2);q=q->next;}putpixel(q->dx,q->dy,2);/*右邊界進行裁減*/q=builxx(head,230);head=q;while(q->next!=NULL){putpixel(q->dx,q->dy,1);q=q->next;}putpixel(q->dx,q->dy,1);/*下邊界進行裁減*/q=builyy(head,200);head=q;s[0]=q->dx;s[1]=q->dy;q=q->next;setcolor(14);outtextxy(100,100,"abc");while(q!=NULL){line(s[0],s[1],q->dx,q->dy);s[0]=q->dx;s[1]=q->dy;q=q->next;getch();}q=head;outtextxy(200,200,"def");line(s[0],s[1],q->dx,q->dy);getch();}第六章曲線和曲面3、參照Hermite三次曲線的幾何形式,試用B[P0P1P0uP1uP0uuP1uu]T,推導(dǎo)相應(yīng)五次曲線的調(diào)和函數(shù)和系數(shù)矩陣M。解:設(shè)Hermite五次曲線的幾何形式為:P(t)=a5t5+a4t4+a3t3+a2t2+a1t+a0其中t∈[0,1]按題意,已知曲線兩端點的坐標值P0P1曲線兩端點的一階導(dǎo)數(shù)值P0uP1u曲線兩端點的二階導(dǎo)數(shù)值P0uuP1uu則求出系數(shù)a5,a4,a3,a2,a1,a0則P(t)就可確定;由于P(t)=a5t5+a4t4+a3t3+a2t2+a1t+a0其中t∈[0,1]P?(t)=5a5t4+4a4t3+3a3t2+2a2t+a1P”(t)=20a5t3+12a4t2+6a3t+2a2P0=P(0)=a0P1=P(1)=a5+a4+a3+a2+a1+a0P0?=P?(0)=a1P1?=P?(1)=5a5+4a4+3a3+2a2+a1P0”=P”(0)=2a2P1”=P”(1)=20a5+12a4+6a3+2a2所以a0=P(0)a1=P?(0)a2=P”(0)/2a3=10P(1)-10P(0)-4P?(1)-6P?(0)+P”(1)/2-3P”(0)/2a4=-15P(1)+15P(0)+7P?(1)+8P?(0)-P”(1)-3P”(0)/2a5=6P(1)-6P(0)-3P?(1)-3P?(0)-P”(0)/2+P”(1)/2=>P(t)=[-6P(0)+6P(1)-3P?(0)-3P?(1)-P”(0)/2+P”(1)/2]t5+[+15P(0)-15P(1)+8P?(0)+7P?(1)+3P”(0)/2]t4+[-10P(0)+10P(1)-6P?(0)-4P?(1)-3P”(0)/2+P”(1)/2]t3+[P”(0)/2]2+[P?(0)]+P(0)整理得:P(t)=(-6ttt5+15t4-10t3+1)P(0)+(6t5-15t4+10t3)P(1)+(-3t5+8t4-6t3+t)P?(0)+(-3t5+7t4-4t3)P?(1)+(-t5/2+3t4/2-3t3/2+t2/2)P”(0)+(t5/2-t4+t3/2)P”(1)故調(diào)和函數(shù)為:F(0)=-6t5+15t4-10t3+1F(1)=6t5-15t4+10t3F(2)=-3t5+8t4-6t3+tF(3)=-3t5+7t4-4t3F(4)=-t5/2+3t4/2-3t3/2+t2/2F(5)=t5/2-t4+t3/2系數(shù)矩陣為:-6615-15-3-387-1/21/23/2-1-1010-6-4-3/21/200001/200010001000009.試求兩段三次Hermite曲線達C1和G1連續(xù)的條件解:兩段三次Hermite曲線分別為:Q1(t1)=a3t13+a2t12+a1t1+a0t1∈[01]Q2(t2)=b3t23+b2t22+b1t2+b0t2∈[01](1)依據(jù)G1連續(xù)充要條件為:Q1(1)和Q2(0)在P點處重合,且其在P點處的切矢量方向相同,大小不等即Q1(1)=Q2(0),Q1?(1)≠Q(mào)2?(0),Q1”(1)=Q2”(0)而Q1(1)=a3+a2+a1+a0Q2(0)=b0Q1?(t1)=3a3t12+2a2t1+a1Q2?(t2)=3b3t22+2b2t2+b1Q1?(1)=3a3+2a2+a1Q2?(0)=b1Q1”(t1)=6a3t1+2a2Q2”(t2)=6b3t2+2b2Q1”(1)=6a3+2a2Q2”(0)=2b2=>兩段三次Hermite曲線:Q1(t1)=a3t13+a2t12+a1t1+a0t1∈[01]Q2(t2)=b3t23+b2t22+b1t2+b0t2∈[01]要達到G1連續(xù),其系數(shù)必須滿足下列關(guān)系式:a3+a2+a1+a0=b03a3+2a2+a1≠b16a3+2a2=2b2(2)依據(jù)C1連續(xù)充要條件為:Q1(1)和Q2(0)在P點處重合,且其在P點處的切矢量方向相同,大小相等即Q1(1)=Q2(0),Q1?(1)=Q2?(0),Q1”(1)=Q2”(0)而Q1(1)=a3+a2+a1+a0Q2(0)=b0Q1?(t1)=3a3t12+2a2t1+a1Q2?(t2)=3b3t22+2b2t2+b1Q1?(1)=3a3+2a2+a1Q2?(0)=b1Q1”(t1)=6a3t1+2a2Q2”(t2)=6b3t2+2b2Q1”(1)=6a3+2a2Q2”(0)=2b2=>兩段三次Hermite曲線:Q1(t1)=a3t13+a2t12+a1t1+a0t1∈[01]Q2(t2)=b3t23+b2t22+b1t2+b0t2∈[01]要達到C1連續(xù),其系數(shù)必須滿足下列關(guān)系式:a3+a2+a1+a0=b03a3+2a2+a1=b16a3+2a2=2b210.給定四點P1(0,0,0),P2(1,1,1),P3(2,-1,-1),P4(3,0,0),用其作為特征多邊形來構(gòu)造一條三次Bezier曲線,并計算參數(shù)為0,1/3,2/3,1的值。解:三次Bezier曲線的一般式為:P(t)=(1-t)3P1+3t(1-t)2P2+3t2(1-t)P3+t3P4t∈[01]其矩陣表達式為-13-31P1P(t)=[t3t2t1]3-630P2-3300P31000P4-13-31000=[t3t2t1]3-630111-33002-1-11000300066=>P(t)=[t3t2t1]0-9-9333000然后分別令t=0,1/3,2/3,1計算上述式子即可當(dāng)t=0時P(0)=00010660-9-9333000=000當(dāng)t=1/3時P(1/3)=1/331/321/310660-9-9333000=12/92/9當(dāng)t=2/3時P(2/3)=(2/3)3(2/3)22/310660-9-9333000=2-2/92/9當(dāng)t=1時P(0)=11110660-9-9333000=30011.已知由P1(0,0,0),P2(2,2,-2),P3(2,-1,-1),P4(3,0,0),Q1(4,0,0),Q2(6,-2,1),Q3(8,-3,2),Q4(10,0,1)確定的兩段三次Bezier曲線,試求其在P4(Q1)處達到C1連續(xù)的條件解:設(shè)兩段連續(xù)的三次Bezier曲線分別為:P(t),Q(t)t∈[01]則P(t1)=(1-t1)3P1+3t1(1-t1)2P2+3t12(1-t1)P3+t13P4t1∈[01]Q(t2)=(1-t2)3Q1+3t2(1-t2)2Q2+3t22(1-t2)Q3+t23Q4t2∈[01]將P1、P2、P3、P4的分量分別代入P(t)得到相應(yīng)的分量Px(t)=(1-t)3*0+3t(1-t)2*2+3t2(1-t)*2+t3*4=4t3–6t2+6tPy(t)=(1-t)3*0+3t(1-t)2*2+3t2(1-t)*(-1)+t3*0=9t3–15t2+6tPz(t)=(1-t)3*0+3t(1-t)2*(-2)+3t2(1-t)*(-1)+t3*0=-3t3+9t2-6t即三次Bezier曲線的矩陣式為:P(t)=[t3t2t1]49-30-6-159066-600000將Q1、Q2、Q3、Q4的分量分別代入Q(t)得到相應(yīng)的分量Qx(t)=(1-t)3*4+3t(1-t)2*6+3t2(1-t)*8+t3*10=6t+4Qy(t)=(1-t)3*0+3t(1-t)2*(-2)+3t2(1-t)*(-3)+t3*0=3t3+3t2-6tQz(t)=(1-t)3*0+3t(1-t)2*1+3t2(1-t)*2+t3*1=-2t3+3t即三次Bezier曲線的矩陣式為:Q(t)=[t3t2t1]03-2003006-6304004P(t)和Q(t)在P4(Q1)處達到C1連續(xù)的條件是:P(1)和Q(0)在P4(Q
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 2777-2024林化類固體產(chǎn)品生產(chǎn)綜合能耗
- 湘師大版道德與法治九年級下冊4.1《感受時代洗禮》聽課評課記錄
- 招商引資項目合同(2篇)
- 理療按摩技術(shù)加盟合同(2篇)
- 新北師大版小學(xué)數(shù)學(xué)一年級上冊《有幾棵樹》聽評課記錄
- 岳麓版歷史七年級下冊第26課《唐代的社會風(fēng)尚與文化》聽課評課記錄2
- 蘇教版數(shù)學(xué)九年級上冊聽評課記錄《1-2一元二次方程的解法(1)》
- 湘教版數(shù)學(xué)七年級上冊5.2《復(fù)式統(tǒng)計圖及統(tǒng)計圖的選擇》聽評課記錄1
- 中華書局版歷史七年級上冊第17課《三國兩晉南北朝的文化》聽課評課記錄
- 新版湘教版秋八年級數(shù)學(xué)上冊第一章分式課題同分母分式的加法和減法聽評課記錄
- 體質(zhì)健康概論
- 檔案管理流程優(yōu)化與效率提升
- 顱腦損傷的生物標志物
- 2023高考語文實用類文本閱讀-新聞、通訊、訪談(含答案)
- 人工智能在商場應(yīng)用
- (完整word版)大格子作文紙模板(帶字數(shù)統(tǒng)計)
- 高考語文復(fù)習(xí):小說閱讀主觀題題型探究-解讀《理水》
- 物流營銷(第四版) 課件 第一章 物流營銷概述
- 藍印花布鑒賞課件
- 血液灌流流程及注意事項詳細圖解
- 5A+Chapter+2+Turning+over+a+new+leaf 英語精講課件
評論
0/150
提交評論