第一篇:二維幾何變換課程設(shè)計(jì)
二維幾何變化
一:實(shí)驗(yàn)?zāi)康?/p>
(1)掌握二維平移、比例、旋轉(zhuǎn)幾何變換矩陣(2)掌握矩陣乘法的編程實(shí)現(xiàn)
(3)掌握相對于任一參考點(diǎn)的比例變換和旋轉(zhuǎn)變換 二:二維幾何變化基本理論 1.二維平移變換 一般情況:
2.二維比例變換
關(guān)于原點(diǎn)的比例變換:
如果想關(guān)于某點(diǎn)進(jìn)行比例變換,可以先平移到這個(gè)點(diǎn),進(jìn)行比例變換,再平移回來。
3.二維旋轉(zhuǎn)變換 關(guān)于原點(diǎn)的旋轉(zhuǎn):
如果想關(guān)于某點(diǎn)進(jìn)行旋轉(zhuǎn)變換,可以先平移到這個(gè)點(diǎn),進(jìn)行旋轉(zhuǎn)變換,再平移回來。
二:實(shí)驗(yàn)要求
(1)設(shè)計(jì)包含齊次坐標(biāo)的二維點(diǎn)類CP2(2)設(shè)計(jì)二維幾何變換類
(3)設(shè)計(jì)雙緩沖技術(shù),先在MemDC中繪制,然后用BitBlt將圖形復(fù)制到PDC,同時(shí)禁止背景刷新
(4)生成多邊形頂點(diǎn)(5)繪制幾何變換圖形(6)使用定時(shí)器動(dòng)態(tài)更新圖形 三:實(shí)驗(yàn)步驟
(1)設(shè)計(jì)包含齊次坐標(biāo)的二維點(diǎn)類CP2(2)設(shè)計(jì)二維幾何變換類
a:二維變換矩陣
b:復(fù)合變換矩陣
c:定義二維變換類CtransForm(3)設(shè)計(jì)雙緩沖(4)讀入圖形頂點(diǎn)(5)繪制圖形(6)定時(shí)器函數(shù)(7)禁止背景刷新函數(shù)
四:程序代碼
CTestView::CTestView(){
// TODO: add construction code here directionX=1;directionY=1;directionS=1;R = 30;
translateX=1;translateY=1;
rotate = 1;
scale = 1;} CTestView::~CTestView(){ }
void CTestView::DoubleBuffer(){
int flag=0;CDC * pDC = GetDC();CRect rect;if(scale>2)if(scale<-2)
directionS=-1;);
directionS=1;GetClientRect(&rect);pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(rect.Width(),rect.Height());pDC->SetViewportExt(rect.Width(),-rect.Height());pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);CDC MemDC;CBitmap NewBitmap,*pOldBitmap;MemDC.CreateCompatibleDC(pDC);NewBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()pOldBitmap=MemDC.SelectObject(&NewBitmap);MemDC.SetMapMode(MM_ANISOTROPIC);MemDC.SetWindowExt(rect.Width(), rect.Height());MemDC.SetViewportExt(rect.Width(),-rect.Height());MemDC.SetViewportOrg(rect.Width()/2,rect.Height()/2);ReadPoint();tran.Translate(translateX,translateY);tran.Rotate(rotate,CP2(translateX,translateY));tran.Scale(scale,scale,CP2(translateX,translateY));DrawObject(&MemDC);pDC->BitBlt(-rect.Width()/2,-rect.Height()/2,rect.Width(),rect.HeightMemDC.SelectObject(pOldBitmap);NewBitmap.DeleteObject();MemDC.DeleteDC();ReleaseDC(pDC);
BorderCheck();(),&MemDC,-rect.Width()/2,-rect.Height()/2,SRCCOPY);
} if(P!=NULL){
} delete []P;P=NULL;void CTestView::ReadPoint(){
}
void CTestView::DrawObject(CDC * pDC){
// CLine *line=new CLine;CPen pen(PS_SOLID,1,RGB(255,0,0));pDC->SelectObject(&pen);for(int i=0;i } P[degree].x = 0;P[degree].y = 0;tran.SetMat(P,degree+1);P[i].x=R*cos(i*Dtheta);P[i].y=R*sin(i*Dtheta);// static int y = 0; } { pDC->MoveTo(ROUND(P[degree].x),ROUND(P[degree].y));pDC->LineTo(ROUND(P[i].x),ROUND(P[i].y));pDC->LineTo(ROUND(P[(i+1)%degree].x),ROUND(P[(i+1)%degre} pen.DeleteObject();// delete line;e].y)); void CTestView::OnDraw(CDC* pDC){ } BOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){ } void CTestView::OnTimer(UINT nIDEvent){ // TODO: Add your message handler code here and/or call default degree = 8;translateX += 1*directionX;translateY += 2*directionY;// default preparation return DoPreparePrinting(pInfo);CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here SetTimer(1,100,NULL); } rotate += 2;DoubleBuffer();CView::OnTimer(nIDEvent); scale+=0.5*directionS;void CTestView::BorderCheck(){ if(P[degree].x>50) } 五:運(yùn)行結(jié)果 { directionX=-1; } { directionX=1; directionY=1;} directionY=-1; if(P[degree].x<-50) 六:實(shí)驗(yàn)總結(jié) (1)因?yàn)槭紫冗M(jìn)行的是平移變換,所以對于比例變換和旋轉(zhuǎn)變換,需要進(jìn)行相當(dāng)于右窗格屏幕中的二維幾何變換。 (2)本實(shí)驗(yàn)的“動(dòng)畫”菜單項(xiàng)的播放按鈕的消息映射是在CMainFrame類中完成的。 二維動(dòng)畫課程設(shè)計(jì): “公益動(dòng)畫短片” 要求: 1.給Flash動(dòng)畫配上聲音、音效、音樂,片長時(shí)間為1分30秒左右。2.具體劇本內(nèi)容可自己擬定。(備注:延續(xù)動(dòng)畫概論課程的第二次“畫分鏡頭劇本”的作業(yè),把靜態(tài)分鏡頭畫面完善成動(dòng)態(tài)的動(dòng)畫短片)。3.充分運(yùn)用課程知識(shí),體現(xiàn)運(yùn)動(dòng)規(guī)律的合理性,動(dòng)畫的夸張性; 4.運(yùn)用分鏡頭畫面的知識(shí)來設(shè)計(jì)鏡頭,使用Flash軟件完成動(dòng)態(tài)畫面。 5.完成課程設(shè)計(jì)相關(guān)說明,內(nèi)容包括:操作步驟、制作過程中的圖片、制作體會(huì),參考文獻(xiàn)等等,并說明使用的軟件版本。 課程設(shè)計(jì)說明的格式要求: 第一章 公益動(dòng)畫短片的設(shè)計(jì)方案 (參考傳統(tǒng)二維動(dòng)畫制作流程,完成前期設(shè)計(jì)階段的描述,要求附上文字劇本、分鏡頭畫面劇本,分鏡頭格式按照之前要求規(guī)范化書寫)第二章 制作步驟 2.1 角色造型與場景造型的設(shè)定 2.2 按分鏡頭畫面完成鏡頭的運(yùn)動(dòng)與組接,以及場景的轉(zhuǎn)換 2.3 每一個(gè)鏡頭中的動(dòng)畫部分 2.4 聲音、音效、音樂的加入 第三章 總結(jié)(心得體會(huì)) 6.應(yīng)交文件:一個(gè)光盤【動(dòng)畫源文件(.fla)、發(fā)布文件(.swf)、課程設(shè)計(jì)說明文檔電子版】; 一份打印稿紙質(zhì)的文檔; 備注:要自己獨(dú)立完成;文件要齊全,裝入課程設(shè)計(jì)袋中。 第17周星期五(12月28日)交 課 程 設(shè) 計(jì)(說 明) 題 目 姓 名 學(xué) 號(hào) 所在學(xué)院 專業(yè)班級(jí) 指導(dǎo)教師 日 期 年 月 日 計(jì)算機(jī)圖形學(xué) 實(shí)驗(yàn)報(bào)告 課程名稱 : 計(jì)算機(jī)圖形學(xué) 實(shí)驗(yàn)名稱 : 圖形繪制與變換 學(xué) 院 : 電子信息工程學(xué)院 專 業(yè) : 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) : 11計(jì)科本 01班 學(xué) 號(hào) : 111102020103 姓 名 : 張慧 指導(dǎo)教師 : 王征風(fēng) 二零一四年 目錄 一、引言----------------3 二、設(shè)計(jì)需求---------3 2.1 設(shè)計(jì)目標(biāo)--3 2.2 設(shè)計(jì)環(huán)境--3 2.2.1 VC++6.0------------------------3 2.2.2 MFC------------------------------4 2.3 設(shè)計(jì)題目及要求----------------------4 2.4 總體流程圖----------------------------4 三、課程設(shè)計(jì)原理---5 3.1 實(shí)現(xiàn)的算法------------------------------5 3.1.2 Bresenham算法畫直線------5 3.1.3 中心點(diǎn)算法畫圓和橢圓------5 3.2 圖形變換的基本原理------------------7 3.2.1平移變換------------------------7 3.2.2 旋轉(zhuǎn)變換----------------------8 3.2.3 比例變換----------------------8 四、總體設(shè)計(jì)與功能實(shí)現(xiàn)-------------------------8 4.1 主要界面設(shè)計(jì)---------------------------8 4.2 設(shè)置顏色界面---------------------------8 4.2.1 界面設(shè)置代碼------------------8 4.2.2 運(yùn)行結(jié)果------------------------9 4.3 二維線畫圖元實(shí)現(xiàn)---------------------9 4.4 畫多邊形功能的實(shí)現(xiàn)--------------13 4.5 畫Bezier曲線功能的實(shí)現(xiàn)-------14 4.6 二維圖形變換的實(shí)現(xiàn)--------------16 4.7 三維圖形的變換--------------------17 五、實(shí)驗(yàn)心得體會(huì) 一、引言 計(jì)算機(jī)圖形學(xué)(Computer Graphics,簡稱CG)是一種使用數(shù)學(xué)算法將二維或三維圖形轉(zhuǎn)化為計(jì)算機(jī)顯示器的柵格形式的科學(xué)。簡單地說,計(jì)算機(jī)圖形學(xué)的主要研究內(nèi)容就是研究如何在計(jì)算機(jī)中表示圖形、以及利用計(jì)算機(jī)進(jìn)行圖形的計(jì)算、處理和顯示的相關(guān)原理與算法。是計(jì)算機(jī)科學(xué)的一個(gè)分支領(lǐng)域,主要關(guān)注數(shù)字合成與操作視覺的圖形內(nèi)容。計(jì)算機(jī)圖形學(xué)研究的是應(yīng)用計(jì)算機(jī)產(chǎn)生圖像的所有工作,不管圖像是靜態(tài)的還是動(dòng)態(tài)的,可交互的還是固定的,等等。圖形API是允許程序員開發(fā)包含交互式計(jì)算機(jī)圖形操作的應(yīng)用而不需要關(guān)注圖形操作細(xì)節(jié)或任務(wù)系統(tǒng)細(xì)節(jié)的工具集。計(jì)算機(jī)圖形學(xué)有著廣泛的應(yīng)用領(lǐng)域,包括物理、航天、電影、電視、游戲、藝術(shù)、廣告、通信、天氣預(yù)報(bào)等幾乎所有領(lǐng)域都用到了計(jì)算機(jī)圖形學(xué)的知識(shí),這些領(lǐng)域通過計(jì)算機(jī)圖形學(xué)將幾何模型生成圖像,將問題可視化從而為各領(lǐng)域更好的服務(wù)。 計(jì)算機(jī)圖形學(xué)利用計(jì)算機(jī)產(chǎn)生讓人賞心悅目的視覺效果,必須建立描述圖形的幾何模型還有光照模型,再加上視角、顏色、紋理等屬性,再經(jīng)過模型變換、視圖變換、投影操作等,這些步驟從而實(shí)現(xiàn)一個(gè)完整的OpenGL程序效果。OpenGL是一個(gè)開放的三維圖形軟件包,它獨(dú)立于窗口系統(tǒng)和操作系統(tǒng),以它為基礎(chǔ)開發(fā)的應(yīng)用程序可以十分方便地在各種平臺(tái)間移植。計(jì)算機(jī)圖形學(xué)通過應(yīng)用OpenGL的功能,使得生成的圖形效果具有高度真實(shí)感。學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的重點(diǎn)是掌握OpenGL在圖形學(xué)程序中的使用方法。事實(shí)上,圖形學(xué)也把可以表示幾何場景的曲線曲面造型技術(shù)和實(shí)體造型技術(shù)作為其主要的研究內(nèi)容。同時(shí),真實(shí)感圖形計(jì)算的結(jié)果是以數(shù)字圖像的方式提供的,計(jì)算機(jī)圖形學(xué)也就和圖像處理有著密切的關(guān)系。 通過21世紀(jì)是信息的時(shí)代,在日新月異的科技更新中相信計(jì)算機(jī)會(huì)發(fā)揮越來越重要的作用,計(jì)算機(jī)圖形學(xué)也會(huì)在更多的領(lǐng)域所應(yīng)用,雖然我國在這方面還比較薄弱,但相信會(huì)有越來越好的時(shí)候的。 二、設(shè)計(jì)需求 2.1 設(shè)計(jì)目標(biāo) 以圖形學(xué)算法為目標(biāo),深入研究。繼而策劃、設(shè)計(jì)并實(shí)現(xiàn)一個(gè)能夠表現(xiàn)計(jì)算機(jī)圖形學(xué)算法原理的或完整過程的演示系統(tǒng),并能從某些方面作出評(píng)價(jià)和改進(jìn)意見。通過完成一個(gè)完整程序,經(jīng)歷策劃、設(shè)計(jì)、開發(fā)、測試、總結(jié)和驗(yàn)收各階段,達(dá)到:鞏固和實(shí)踐計(jì)算機(jī)圖形學(xué)課程中的理論和算法;學(xué)習(xí)表現(xiàn)計(jì)算機(jī)圖形學(xué)算法的技巧;培養(yǎng)認(rèn)真學(xué)習(xí)、積極探索的精神。 2.2 設(shè)計(jì)環(huán)境 2.2.1 VC++6.0 VC++6.0是 Microsoft 公司推出的一個(gè)基于 Windows 系統(tǒng)平臺(tái)、可視化的 集成開發(fā)環(huán)境,它的源程序按 C++語言的要求編寫,并加入了微軟提供的功能 強(qiáng)大的 MFC(Microsoft Foundation Class)類庫。MFC 中封裝了大部分 Windows API 函數(shù)和 Windows 控件,它包含的功能涉及到整個(gè) Windows 操作系統(tǒng)。MFC 不僅給用戶提供了 Windows 圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng) 用程序的組件,這樣,開發(fā)人員不必從頭設(shè)計(jì)創(chuàng)建和管理一個(gè)標(biāo)準(zhǔn) Windows 應(yīng) 用程序所需的程序,而是從一個(gè)比較高的起點(diǎn)編程,故節(jié)省了大量的時(shí)間。另 外,它提供了大量的代碼,指導(dǎo)用戶編程時(shí)實(shí)現(xiàn)某些技術(shù)和功能。因此,使用VC++提供的 高度可視化的應(yīng)用程序開發(fā)工具和 MFC 類庫,可使應(yīng)用程序開發(fā)變 得簡單。2.2.2 MFC MFC(Microsoft Foundation Classes),是 一 個(gè) 微 軟 公 司 提 供 的 類 庫(class libraries)以 C++類的形式封裝了 Windows 的 API,它包含了窗口等許多類的定義。各種類的集合構(gòu)成了一個(gè)應(yīng)運(yùn)程序的框架結(jié)構(gòu),以減少應(yīng)用程序開發(fā)人員的工作 量。其中包含的類包含大量 Windows 句柄封裝類和很多 Windows 的內(nèi)建控件和組 件的封裝類。MFC 6.0 版本封裝了大約 200 個(gè)類,其中的一些可以被用戶直接使用。例如CWnd 類封裝了窗口的功能,包括打印文本、繪制圖形及跟蹤鼠標(biāo)指針的移動(dòng)等;CsplitterWnd 類是從 CWnd 類派生出來的,繼承了基類或稱父類 CWnd 類的所 有特 性,但增加了自己的功能,實(shí)現(xiàn)拆分窗口,使窗口至少可被拆分成兩個(gè)窗口,用戶 可以移動(dòng)兩個(gè)窗口之間的邊框來改變窗口的大??;CtoolBar 類可以定義工具欄等。MFC 命名的慣例是類的名字通常是由“C”打頭;成員變量使用前綴“m_”,接著使用一個(gè)字母來指明數(shù)據(jù)類型,然后是變量的名稱;所有的單詞用大寫字母開頭。 2.3 設(shè)計(jì)題目及要求 (1)題目:實(shí)現(xiàn)多邊形和曲線的繪制和變換 (2)要求:學(xué)會(huì)使用VC++編寫實(shí)現(xiàn)圖形的繪制變換,需包括直線、曲線、多邊形的繪制和變換,及三維立體圖形的相應(yīng)變換.2.4 總體流程圖 三、課程設(shè)計(jì)原理 3.1 實(shí)現(xiàn)的算法 3.1.1 DDA算法畫直線 DDA是數(shù)字微分分析式(Digital Differential Analyzer)的縮寫。 已知直線兩端點(diǎn)(x1,y1)、(x2,y2)則斜率m為:m =(y2-y1)/(x2-x1)= Dx/Dy;直線中的每一點(diǎn)坐標(biāo)都可以由前一點(diǎn)坐標(biāo)變化一個(gè)增量(Dx, Dy)而得到,即表示為遞歸式: xi+1=xi+Dx yi+1=yi+Dy。 遞歸式的初值為直線的起點(diǎn)(x1, y1),這樣,就可以用加法來生成一條直線。具體算法是: 該算法適合所有象限,其中用了用了兩個(gè)函數(shù)如:Integer(-8.5)=-9;Integer(8.5)=8;Sign(i),根據(jù)i的正負(fù),分別得到-1,0,+1; 相應(yīng)代碼: //DDA DrawLine {if(abs(x2-x1)> abs(y2-y1)) length = abs(x2-x1); else length = abs(y2-y1); Dx =(x2-x1)/length; Dy =(y2-y1)/length; x = x1+0.5*Sign(Dx); y = x2 + 0.5*Sign(Dy); i = 1; while(i <= lenght) { setpixel(Integer(x),Integer(y),color); x= x + Dx; y= y + Dy; i+=1;} } 3.1.2 Bresenham算法畫直線 思路如下: // 假設(shè)該線段位于第一象限內(nèi)且斜率大于0小于1,設(shè)起點(diǎn)為(x1,y1),終點(diǎn)為(x2,y2).// 根據(jù)對稱性,可推導(dǎo)至全象限內(nèi)的線段.1.畫起點(diǎn)(x1,y1).2.準(zhǔn)備畫下個(gè)點(diǎn)。x坐標(biāo)增1,判斷如果達(dá)到終點(diǎn),則完成。否則,由圖中可知,下個(gè)要畫的點(diǎn)要么為當(dāng)前點(diǎn)的右鄰接點(diǎn),要么是當(dāng)前點(diǎn)的右上鄰接點(diǎn).如果線段ax+by+c=0與x=x1+1的交點(diǎn)的y坐標(biāo)大于M點(diǎn)的y坐標(biāo)的話,下個(gè)點(diǎn)為U(x1+1,y1+1),否則,下個(gè)點(diǎn)為B(x1+1,y1),3.畫點(diǎn)(U或者B).4.跳回第2步.5.結(jié)束.3.1.3中心點(diǎn)算法畫圓和橢圓 (1)中心點(diǎn)算法畫圓 在一個(gè)方向上取單位間隔,在另一個(gè)方向的取值由兩種可能取值的中點(diǎn)離圓的遠(yuǎn)近而定。實(shí)際處理中,用決策變量的符號(hào)來確定象素點(diǎn)的選擇,因此算法效率較高。生成圓弧的中點(diǎn)算 法和上面講到的生成直線段的中點(diǎn)算法類似。 考慮第一象限內(nèi)x?[0,R/2]的八分之一圓弧段。經(jīng)過計(jì)算,得出判別式的遞推公式為: di?1?di?2xi?3???di?2(xi?yi)?5d?0d?0 (xi, M SE yi,r)E 這兩個(gè)遞推公式的初值條件為: ??(x0,y0,r)?(0,R)?d0?5/4?R 編寫成員函數(shù)如下: void CMy2_9View::MidPointEllipse(CDC *pDC, double a, double b, int color){ double x,y,d,xP,yP,squarea,squareb; squarea=a*a; squareb=b*b; xP=(int)(0.5+(double)squarea/sqrt((double)(squarea+squareb))); yP=(int)(0.5+(double)squareb/sqrt((double)(squarea+squareb))); x=0; y=b; d=4*(squareb-squarea*b)+squarea; pDC->SetPixel(x,y,color); while(x<=xP) {if(d<=0)d+=4*squareb*(2*x+3); else {d+=4*squareb*(2*x+3)-8*squarea*(y-1); y--;} x++; pDC->SetPixel(x,y,color);} x=a; y=0; d=4*(squarea-a*squareb)+squareb; pDC->SetPixel(x,y,color); while(y { if(d<=0)d+=4*squarea*(2*y+3); else {d+=4*squarea*(2*y+3)-8*squareb*(x-1); x--;} y++; pDC->SetPixel(x,y,color);}} 編寫OnDraw函數(shù)如下: void CMy2_9View::OnDraw(CDC* pDC){CMy2_9Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);MidPointEllipse(pDC,500,300,RGB(0,0,0));}(2)中心點(diǎn)算法畫橢圓 我們先考慮圓心在原點(diǎn)的橢圓的生成,對于中心不是原點(diǎn)的橢圓,可以通過坐標(biāo)的平移變換獲得相應(yīng)位置的橢圓。中心在原點(diǎn)。焦點(diǎn)在坐標(biāo)軸上的標(biāo)準(zhǔn)橢圓具有X軸對稱、Y軸對稱和原點(diǎn)對稱特性,已知橢圓上第一象限的P點(diǎn)坐標(biāo)是(x, y),則橢圓在另外三個(gè)象限的對稱點(diǎn)分別是(x,-y)、(-x, y)和(-x,-y)。因此,只要畫出第一象限的四分之一橢圓,就可以利用這三個(gè)對稱性得到整個(gè)橢圓。 相應(yīng)代碼: void MP_Ellipse(int xc , int yc , int a, int b){ double sqa = a * a;double sqb = b * b;double d = sqb + sqa *(-b + 0.25);int x = 0;int y = b;EllipsePlot(xc, yc, x, y);while(sqb *(x + 1)< sqa *(y1))* 2-(a * b)* 2;while(y > 0){if(d < 0){ d += sqb *(2 * x + 2)+ sqa *(-2 * y + 3);x++;} else {d += sqa *(-2 * y + 3);} y--;EllipsePlot(xc, yc, x, y);}} 3.2 圖形變換的基本原理 3.2.1平移變換 平移變換函數(shù)如下: void glTranslate{fd}(TYPE x, TYPE y, TYPE z); 三個(gè)函數(shù)參數(shù)就是目標(biāo)分別沿三個(gè)軸向平移的偏移量。這個(gè)函數(shù)表示用于這三個(gè)偏移量生成的矩陣乘以當(dāng)前矩陣。當(dāng)參數(shù)是(0.0,0.0,0.0)時(shí),表示對函數(shù)glTranslate*()的操作是單位矩陣,也就是對物體沒有影響。 3.2.2 旋轉(zhuǎn)變換 旋轉(zhuǎn)變換函數(shù)如下: Void glRota{fd}TYPE angle, TYPE x, TYPE y, TYPE z); 函數(shù)中第一個(gè)參數(shù)是表示目標(biāo)沿從點(diǎn)(x,y,z)到原點(diǎn)方向逆時(shí)針旋轉(zhuǎn)的角度,后三個(gè)參數(shù)是旋轉(zhuǎn)的方向點(diǎn)坐標(biāo)。這個(gè)函數(shù)表示用這四個(gè)參數(shù)生成的矩陣乘以當(dāng)前矩陣。當(dāng)角度參數(shù)是0.0時(shí),表示對物體沒有影響。3.2.3 比例變換 比例變換函數(shù)如下: Void glScale{fd}(TYPE x, TYPE y, TYPE z); 單個(gè)函數(shù)參數(shù)值就是目標(biāo)分別沿三個(gè)軸方向縮放的比例因子。這個(gè)函數(shù)表示用這三個(gè)比例因子生成的矩陣乘以當(dāng)前矩陣。這個(gè)函數(shù)能完成沿相應(yīng)的軸對目標(biāo)進(jìn)行拉伸、壓縮和反射三項(xiàng)功能。以參數(shù)x為例,若當(dāng)x大于1.0時(shí),表示沿x方向拉伸目標(biāo);若x小于1.0,表示沿x軸方向收縮目標(biāo);若x=-1.0表示沿x軸反射目標(biāo)。其中參數(shù)為負(fù)值時(shí)表示對目標(biāo)進(jìn)行相應(yīng)軸的反射變換。 四、總體設(shè)計(jì)與功能實(shí)現(xiàn) 4.1 主要界面設(shè)計(jì) 4.2 設(shè)置顏色界面 4.2.1 界面設(shè)置代碼: void CGraphicsView::OnClock(){ WHAT_TO_DO=ID_CLOCK; clean();int xx = 450, yy = 300, r = 150,d = 5;int i, white = RGB(255,255,255);mile(xx, yy, r, COLOR);Matrix m(xx, 240), s(xx, 200);Matrix t1(xx, yy, true), t2(-xx,-yy, true), mr(PI/1800), sr(PI/30);mile(m.getx(), m.gety(), d+1, COLOR);mile(s.getx(), s.gety(), d, COLOR);dne(m.getx(), m.gety(), xx, yy, COLOR);dne(s.getx(), s.gety(), xx, yy, COLOR); for(i=0;i<120;i++){ ::Sleep(80); mile(m.getx(), m.gety(), d+1, white);mile(s.getx(), s.gety(), d, white);dne(m.getx(), m.gety(), xx, yy, white);dne(s.getx(), s.gety(), xx, yy, white);m = t1*mr*t2*m;s = t1*sr*t2*s;mile(m.getx(), m.gety(), d+1, COLOR);mile(s.getx(), s.gety(),d, COLOR);dne(m.getx(), m.gety(), xx, yy, COLOR);dne(s.getx(), s.gety(), xx, yy, COLOR);}} 4.2.2 點(diǎn)擊“設(shè)置--顏色”后,運(yùn)行結(jié)果如下: 4.3 二維線畫圖元實(shí)現(xiàn) 4.3.1 實(shí)現(xiàn)代碼: void CGraphicsView::MidCir(CDC *pdc, int x0, int y0, int x1, int y1, int color){ int r,x,y,deltax,deltay,d;r=sqrt(((double)x1-(double)x0)*((double)x1-(double)x0)+((double)y1-(double)y0)*((double)y1-(double)y0));x=0;y=r;deltax=3;deltay=2-r-r;d=1-r;while(x<=y){ ::Sleep(time); pdc->SetPixel(x+x0,y+y0,color); ::Sleep(time); pdc->SetPixel(-x+x0,y+y0,color); ::Sleep(time); pdc->SetPixel(x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixel(-x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixel(y+x0,x+y0,color); ::Sleep(time); pdc->SetPixel(-y+x0,x+y0,color); ::Sleep(time); pdc->SetPixel(y+x0,-x+y0,color); ::Sleep(time); pdc->SetPixel(-y+x0,-x+y0,color); if(d<0) { d+=deltax; deltax+=2; x++;} else { d+=deltax+deltay; deltax+=2; deltay+=2; x++; y--;}}} void CGraphicsView::midellispse(int xx, int yy, int r1, int r2, int color){ } void CGraphicsView::Ellipse(CDC *pdc, int x1, int y1, int x2, int y2, int color){ xx0=(x2+x1)/2;yy0=(y2+y1)/2;rra=abs(x2-x1)/2;rrb=abs(y2-y1)/2;if(rra==0 && rrb==0)return;Ellipse0(pdc,xx0,yy0,rra,rrb,color);} void CGraphicsView::Ellipse0(CDC *pdc, int x0, int y0, int a, int b, int color){ int i,yy;int x,y,deltax,deltay;int aa,aa2,aa3,bb,bb2,bb3;double d1,d2;aa=a*a;aa2=aa*2;aa3=aa*3;bb=b*b;bb2=bb*2;bb3=bb*3;x=0;y=b;d1=bb+aa*(-b+0.25);deltax=bb3;deltay=-aa2*b+aa2;pdc->SetPixelV(x+x0,y+y0,color);pdc->SetPixelV(x+x0,-y+y0,color);while(bb*(x+1) yy=y; if(d1<0) { d1+=deltax; deltax+=bb2; x++;} else { d1+=deltax+deltay; deltax+=bb2; deltay+=aa2; x++; y--;} ::Sleep(time); pdc->SetPixelV(x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,-y+y0,color);} d2=bb*(x+0.5)*(x+0.5)+aa*(y-1)*(y-1)-aa*bb;deltax-=bb;deltay+=aa;while(y>0){ if(d2<0) { d2+=deltax+deltay; deltax+=bb2; deltay+=aa2; x++; y--;} else { d2+=deltay; deltay+=aa2; y--;} ::Sleep(time); pdc->SetPixelV(x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,-y+y0,color);}} void CGraphicsView::DDALine(CDC *pdc, int x0, int y0, int x1, int y1, int color){ int xx,yy,s,s1,s2,di;float dx,dy,k,x,y;dx=x1-x0;if(dx>=0) s1=1;else s1=-1;dy=y1-y0;if(dy>=0) s2=1;else s2=-1;dx=abs(dx);dy=abs(dy);if(dx>=dy){ s=0; di=(int)dx; k=dy/dx*s2;} else { s=1; di=(int)dy; k=dx/dy*s1;} x=x0;y=y0;for(int i=0;i<=di;i++){if(s==0) { xx=(int)x; yy=(int)(y+0.5); ::Sleep(time); pdc->SetPixel(xx,yy,color); x+=s1; y+=k;} else{ xx=(int)(x+0.5); yy=(int)y; ::Sleep(time); pdc->SetPixel(xx,yy,color); y+=s2; x+=k;}}} 4.3.2 點(diǎn)擊二維線畫圖元,課相應(yīng)畫出直線、圓和橢圓,結(jié)果如下: 4.4 畫多邊形功能的實(shí)現(xiàn) 4.4.1 部分實(shí)現(xiàn)代碼: void CGraphicsView::OnDrawDuoBX(){ Vertex_Count dlg;if(dlg.DoModal()==IDOK){ if(dlg.m_vertex_count>MAX) { MessageBox(“輸入頂點(diǎn)數(shù)過大”); return;} VertexTotal=dlg.m_vertex_count; CDC *pDC=GetDC(); CPen pen(PS_SOLID,2,RGB(255,255,255)); CPen *pOldpen=pDC->SelectObject(&pen); pDC->MoveTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5)); int i; for(i=1;i pDC->LineTo((int)(inVertexArray[i].x+0.5),(int)(inVertexArray[i].y+0.5)); pDC->LineTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5)); pDC->SelectObject(pOldpen); ReleaseDC(pDC); inLength=0; outLength=0; WHAT_TO_DO=ID_DrawDuoBX;}} 4.4.2 點(diǎn)擊多邊形,輸入定點(diǎn)個(gè)數(shù),可繪制出相應(yīng)的多邊形,結(jié)果如下: 4.5 畫Bezier曲線功能的實(shí)現(xiàn) 4.5.1 部分實(shí)現(xiàn)代碼: void CGraphicsView::OnBezier(){ // TODO: Add your command handler code here WHAT_TO_DO=ID_BEZIER;CDC *p=GetDC(); p->TextOut(10, 20, “PS:鼠標(biāo)左鍵添加曲線,鼠標(biāo)右鍵修改曲線.”); ReleaseDC(p);} void CGraphicsView::OnBezierClear(){ n =-1;RedrawWindow();} void CGraphicsView::DrawBezier(DPOINT *p){ if(n <= 0)return;if((p[n].x < p[0].x+1)&&(p[n].x > p[0].x-1)&&(p[n].y < p[0].y+1)&&(p[n].y > p[0].y-1)){ pDC->SetPixel(p[0].x, p[0].y, COLOR); return;} DPOINT *p1;p1 = new DPOINT[n+1];int i, j;p1[0] = p[0];for(i=1;i<=n;i++){ for(j=0;j<=n-i;j++) { p[j].x =(p[j].x + p[j+1].x)/2; p[j].y =(p[j].y + p[j+1].y)/2;} p1[i] = p[0];} DrawBezier(p);DrawBezier(p1);delete p1;} void CGraphicsView::OnBezierAdd(){ AddorMove = 1;} void CGraphicsView::OnBezierMove(){ AddorMove =-1;} void CGraphicsView::OnMouseMove(UINT nFlags, CPoint point){ switch(WHAT_TO_DO){ case ID_BEZIER: { if(current >= 0){ points[current].x = point.x; points[current].y = point.y; RedrawWindow();} if(current2 >= 0) { points[current2].x = point.x; points[current2].y = point.y; RedrawWindow();} break;} default:break;} CView::OnMouseMove(nFlags, point);} 4.5.2 點(diǎn)擊曲線--Beizer曲線,可實(shí)現(xiàn)Beizer曲線的繪制功能,繪制結(jié)果如下圖: 圖 1 圖 2 4.5.3 點(diǎn)擊曲線--Beizer曲線,可實(shí)現(xiàn)Beizer曲線的移動(dòng),鼠標(biāo)點(diǎn)擊其中的任一點(diǎn),可實(shí)現(xiàn)曲線的移動(dòng),繪制結(jié)果如下圖: 上圖1移動(dòng)后的曲線 上圖2移動(dòng)后的曲線 4.6 二維圖形變換的實(shí)現(xiàn) 可以實(shí)現(xiàn)一橢圓在界面上的隨機(jī)移動(dòng),一圓在界面上饒某一點(diǎn)的旋轉(zhuǎn)和一正方形由大變小在變大的變化,部分實(shí)現(xiàn)代碼如下: void CGraphicsView::OnXuanzhuan(){ WHAT_TO_DO=ID_XUANZHUAN; time=0; OnClear(); CClientDC dc(this);CDC* pDC=&dc; int i, white=RGB(255,255,255), point [2][2]={{300,200},{300,250}}; Matrix a(point[0][0],point[0][1]), b(point[1][0],point[1][1]); int midx=(point[0][0]+point[1][0])/2,midy=(point[0][1]+point[1][1])/2; Matrix t1(midx, midy,true), t2(-midx,-midy,true); Matrix r(PI/50); Matrix temp(midx, midy,true); temp = t1*r*t2; for(i=0;i<200;i++){ ::Sleep(50); MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), white); a = temp*a; b = temp*b; MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), COLOR);} for(i=0;i<200;i++){ ::Sleep(50); MidCir(pDC,a.getx(), a.gety(), b.getx(), b.gety(), white); a = temp*a; b = temp*b; MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), COLOR);} time=5;} void CGraphicsView::OnUpdateXuanzhuan(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_XUANZHUAN);} void CGraphicsView::OnScale(){ WHAT_TO_DO=ID_SCALE; OnClear();CClientDC dc(this);CDC* pDC=&dc; time=0;int i,white=RGB(255,255,255), point[4][2]={{300,250},{400,250},{300,300},{400,300}};float sx=0.9,sy=0.85;int midx=(point[0][0]+point[3][0])/2,midy=(point[0][1]+point[3][1])/2;Matrix s1(sx,sy),s2(1/sx,1/sy);Matrix t1(midx, midy,true), t2(-midx,-midy,true); Matrix a(point[0][0],point[0][1]), b(point[1][0],point[1][1]);Matrix c(point[2][0],point[2][1]), d(point[3][0],point[3][1]);Matrix temp(midx, midy,true);temp = t1*s1*t2;DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR);DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR);DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR);DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);for(i=0;i<20;i++){ ::Sleep(30); DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white); a=temp*a; b=temp*b; c=temp*c; d=temp*d; DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);} temp = t1*s2*t2;for(i=0;i<20;i++){ ::Sleep(30); DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white); a=temp*a; b=temp*b; c=temp*c; d=temp*d; DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);} time=5;} void CGraphicsView::OnUpdateScale(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_SCALE);} 4.7 三維圖形的變換 主要實(shí)現(xiàn)三維圖形的上下左右平移,分別繞X軸Y軸Z軸的旋轉(zhuǎn),放大和縮小,以及正方體六個(gè)面的顏色變換,除此之外,還可以選擇背景顏色的改變 4.7.1 部分代碼如下: void CGraphicsView::OnAoduomianti(){ WHAT_TO_DO=ID_AODUOMIANTI;CDrawDLG dlg1;dlg1.DoModal();} void CGraphicsView::OnUpdateAoduomianti(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_AODUOMIANTI);} void CDrawDLG::OnPaint() { CPaintDC dc(this);// device context for painting CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();// CDC *PDC=pWnd->GetDC();Draw();} void CDrawDLG::Draw(){ CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();CDC *pDC=pWnd->GetDC();CRect rect;pWnd->GetClientRect(rect);D v[8]={ {-fs,-fs,fs},{-fs,fs,fs},{fs,fs,fs},{fs,-fs,fs},{-fs,-fs,-fs},{-fs,fs,-fs},{fs,fs,-fs},{fs,-fs,-fs} },d[8]; POINT p0[4],p1[4],p2[4],p3[4],p4[4],p5[4],w[8];int z[8]; for(int i=0;i<8;i++){ d[i].x=v[i].x; d[i].y=(int)(v[i].y*cos(a*DU)-v[i].z*sin(a*DU)); d[i].z=(int)(v[i].y*sin(a*DU)+v[i].z*cos(a*DU)); v[i].x=(int)(d[i].x*cos(b*DU)+d[i].z*sin(b*DU)); v[i].y=d[i].y; v[i].z=(int)(d[i].z*cos(b*DU)-d[i].x*sin(b*DU)); d[i].x=(int)(v[i].x*cos(c*DU)-v[i].y*sin(c*DU)); d[i].y=(int)(v[i].x*sin(c*DU)+v[i].y*cos(c*DU)); d[i].z=v[i].z; w[i].x=d[i].x+cx; w[i].y=d[i].y+cy; z[i]=d[i].z;} p0[0]=w[0];p0[1]=w[1];p0[2]=w[2];p0[3]=w[3];p1[0]=w[4];p1[1]=w[5];p1[2]=w[6];p1[3]=w[7]; p2[0]=w[0];p2[1]=w[1];p2[2]=w[5];p2[3]=w[4];p3[0]=w[1];p3[1]=w[2];p3[2]=w[6];p3[3]=w[5];p4[0]=w[2];p4[1]=w[3];p4[2]=w[7];p4[3]=w[6];p5[0]=w[0];p5[1]=w[3];p5[2]=w[7];p5[3]=w[4];switch(Maxnum(z,7)){ case 0:fill(p0,p2,p5,0,2,5);break; case 1:fill(p0,p2,p3,0,2,3);break; case 2:fill(p0,p3,p4,0,3,4);break; case 3:fill(p0,p4,p5,0,4,5);break; case 4:fill(p1,p2,p5,1,2,5);break; case 5:fill(p1,p2,p3,1,2,3);break; case 6:fill(p1,p3,p4,1,3,4);break; case 7:fill(p1,p4,p5,1,4,5);break;}} BOOL CDrawDLG::OnInitDialog(){ CDialog::OnInitDialog();m_scroll1.SetScrollRange(-180,180);m_scroll1.SetScrollPos(0);m_scroll2.SetScrollRange(-180,180);m_scroll2.SetScrollPos(0);m_scroll3.SetScrollRange(-180,180);m_scroll3.SetScrollPos(0);m_scroll4.SetScrollRange(0,350);m_scroll4.SetScrollPos(200);m_scroll5.SetScrollRange(0,300);m_scroll5.SetScrollPos(115);m_scroll6.SetScrollRange(0.00,300.00);m_scroll6.SetScrollPos(50.00);a=b=c=0;fs=50.00;SetTimer(1,100,NULL);Ctrl=0;cx=200;cy=115;COLOR1=RGB(123,234,43);COLOR2=RGB(123,123,0);COLOR3=RGB(123,24,235);COLOR4=RGB(0,123,95);COLOR5=RGB(23,234,34);COLOR6=RGB(234,124,0);COLOR7=RGB(0,43,98);return TRUE;// return TRUE unless you set the focus to a control} void CDrawDLG::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ int nID=pScrollBar->GetDlgCtrlID();switch(nID){ case IDC_SCROLLBAR1: a=pScrollBar->GetScrollPos(); switch(nSBCode) { case SB_LINELEFT: a--;break; case SB_LINERIGHT: a++;break; case SB_PAGELEFT: a-=10;break; case SB_PAGERIGHT: a+=10;break; case SB_THUMBTRACK: a=nPos;break;} if(a<-180)a=180; if(a>180)a=-180; pScrollBar->SetScrollPos(a); break;case IDC_SCROLLBAR2: b=pScrollBar->GetScrollPos(); switch(nSBCode) { case SB_LINELEFT: b--;break; case SB_LINERIGHT: b++;break; case SB_PAGELEFT: b-=10;break; case SB_PAGERIGHT: b+=10;break; case SB_THUMBTRACK: b=nPos;break;} if(b<-180)b=180; if(b>180)b=-180; pScrollBar->SetScrollPos(b); break;case IDC_SCROLLBAR3: c=pScrollBar->GetScrollPos(); switch(nSBCode) { case SB_LINELEFT: c--;break; case SB_LINERIGHT: c++;break; case SB_PAGELEFT: c-=10;break; case SB_PAGERIGHT: c+=10;break; case SB_THUMBTRACK: c=nPos;break;} if(c<-180)c=180; if(c>180)c=-180; pScrollBar->SetScrollPos(c); break;case IDC_SCROLLBAR4: cx=pScrollBar->GetScrollPos(); switch(nSBCode) { case SB_LINELEFT: cx--;break; case SB_LINERIGHT: cx++;break; case SB_PAGELEFT: cx-=10;break; case SB_PAGERIGHT: cx+=10;break; case SB_THUMBTRACK: cx=nPos;break;} if(cx<0)cx=200; if(cx>350)cx=200; pScrollBar->SetScrollPos(cx); break;case IDC_SCROLLBAR5: cy=pScrollBar->GetScrollPos(); switch(nSBCode) { case SB_LINELEFT: cy--;break; case SB_LINERIGHT: cy++;break; case SB_PAGELEFT: cy-=10;break; case SB_PAGERIGHT: cy+=10;break; case SB_THUMBTRACK: cy=nPos;break;} if(cy<0)cy=300; if(cy>300)cy=0; pScrollBar->SetScrollPos(cy); break; case IDC_SCROLLBAR6: fs=pScrollBar->GetScrollPos(); switch(nSBCode) { case SB_LINELEFT: fs--;break; case SB_LINERIGHT: fs++;break; case SB_PAGELEFT: fs-=0.55;break; case SB_PAGERIGHT: fs+=0.55;break; case SB_THUMBTRACK: fs=nPos;break;} if(fs<0)fs=50; if(fs>300)fs=50; pScrollBar->SetScrollPos(fs); break;// UpdateData(FALSE);} // Invalidate();Draw();CDialog::OnHScroll(nSBCode, nPos, pScrollBar);} void CDrawDLG::OnOK(){ KillTimer(1); CDialog::OnOK();} int CDrawDLG::Maxnum(int *p, int n){ int max=p[0];int x;for(int i=0;i<=n;i++){ if(max<=p[i]) { max=p[i];x=i;} } return x;} void CDrawDLG::fill(POINT *x, POINT *y, POINT *z, int i,int j,int q){ CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();CDC *pDC=pWnd->GetDC();CRect rect;pWnd->GetClientRect(rect); CDC dcmem;dcmem.CreateCompatibleDC(pDC);CBitmap bmp,*oldbmp;bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());oldbmp=dcmem.SelectObject(&bmp);CBrush brush[6];brush[0].CreateSolidBrush(COLOR1);brush[1].CreateSolidBrush(COLOR2);brush[2].CreateSolidBrush(COLOR3);brush[3].CreateSolidBrush(COLOR4);brush[4].CreateSolidBrush(COLOR5);brush[5].CreateSolidBrush(COLOR6);CBrush *oldbrush=dcmem.SelectObject(&brush[i]);dcmem.FillSolidRect(rect,COLOR7);dcmem.Polygon(x,4);dcmem.SelectObject(&brush[j]);dcmem.Polygon(y,4);dcmem.SelectObject(&brush[q]);dcmem.Polygon(z,4);dcmem.SelectObject(oldbrush);for(int b=0;b<6;b++)brush[b].DeleteObject();pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &dcmem,0,0,SRCCOPY);dcmem.SelectObject(oldbmp);bmp.DeleteObject();dcmem.DeleteDC();} 4.7.2 運(yùn)行結(jié)果如下: (1)實(shí)現(xiàn)多面體的上下左右平移(2)實(shí)現(xiàn)多面體的繞軸旋轉(zhuǎn): (3)實(shí)現(xiàn)多面體的放大縮?。?/p> (4)實(shí)現(xiàn)多面體及背景的顏色設(shè)置: (5)三維圖形變換整體圖形 五、實(shí)驗(yàn)心得體會(huì) 在本次課程設(shè)計(jì)過程中,基本掌握了計(jì)算機(jī)圖形學(xué)關(guān)于圖形繪制變換的基礎(chǔ)知識(shí),DDA法畫直線和中心點(diǎn)法畫圓及橢圓的方法,還對圖形的變換及需要用到的一系列的函數(shù)有了相應(yīng)的理解,也了解的很多有關(guān)于圖形學(xué)中三維圖形的變換的知識(shí)。不過都只是皮毛而已,從中鍛煉了自己的動(dòng)手做實(shí)驗(yàn)的能力,但同時(shí)也讓自己看清了自己的水平,以便在以后的生活里多加強(qiáng)有關(guān)這方面的學(xué)習(xí),從而提升自己在圖形學(xué)方面的知識(shí)水平。 在本次課程設(shè)計(jì)中,設(shè)計(jì)方案存在著很多的死板化的實(shí)現(xiàn)方法,也是很不人性化的一點(diǎn),只提供了畫一種曲線的方法,且畫出的曲線只能移動(dòng),此為本次設(shè)計(jì)方案的不足之一;然后就是能實(shí)現(xiàn)曲面和多邊形的繪制,卻沒有對應(yīng)的實(shí)現(xiàn)繪制好圖形后直接對其進(jìn)行平移、選擇等變換,此為設(shè)計(jì)方案不足之二。再者就是三維圖形只能實(shí)現(xiàn)變換不能實(shí)現(xiàn)繪制,此為設(shè)計(jì)方案不足之三。鑒于個(gè)人能力真的有限,所以只能設(shè)計(jì)出此種級(jí)別的效果了。因?yàn)閷?shí)驗(yàn)重要的只是思想過程,效果的不美觀只能是因?yàn)閷W(xué)習(xí)的知識(shí)還遠(yuǎn)遠(yuǎn)不夠,所以不能設(shè)計(jì)出完美的全面的圖形繪制變換程序。 經(jīng)過此次設(shè)計(jì),使我學(xué)到了很多東西,在沒有開始做程序之前,沒有任何思路,不知道該從哪里入手,可能是因?yàn)樽约浩綍r(shí)不認(rèn)真聽課的緣故。后來經(jīng)過上網(wǎng)查詢資料,翻閱參考書,在別人做的程序的啟發(fā)下,才有了做此程序設(shè)計(jì)的眉目。在設(shè)計(jì)過程中遇到了很多的問題,在這里需要感謝王征風(fēng)老師的幫助和指導(dǎo),以及同學(xué)的幫助,最后一個(gè)個(gè)問題都被解決了,寫出了完整的程序設(shè)計(jì)。最后也發(fā)現(xiàn),其實(shí)只要努力,寫出一個(gè)設(shè)計(jì)不是很困難,重要的是自己在寫程序的過程中,要會(huì)學(xué)習(xí),會(huì)查閱資料。這次的課程設(shè)計(jì)讓我學(xué)習(xí)到了很多,以后我會(huì)努力提高自己在圖形學(xué)方面的知識(shí)水平。 平移變換在幾何中的應(yīng)用 平移變換是幾何中的一種重要變換,運(yùn)用平移變換可以將分散的線段、角或圖形集中到一起,便于問題的研究和解決。這是平移變換中的常用方法,下面僅舉幾例,以作說明。 一、平移變換在幾何證明中的應(yīng)用 例1.如圖,△ABC中,BD=CE,求證: 【解析】 本題涉及到證明的幾條線段雖然都交于一點(diǎn),但對于證明這樣一個(gè)幾何不等式不是很方便。再有BD=CE,運(yùn)用平移變換,將△AEC平移到△A’BD的位置,問題迎刃而解。 【答案】 證明:如圖2,分別過點(diǎn)D、B作CA、EA的平行線,G F D E 兩線相交于F點(diǎn),DF于AB交于G點(diǎn)。 所以,在△AEC和△FBD中,又CE=BD,可證 △AEC≌△FBD,所以AC=FD,AE=FB,在△AGD中,AG+DG>AD,在△BFG中,BG+FG>FB,所以AG+DG-AD>0,BG+FG-FB>0,所以AG+DG+BG+FG-AD-FB>0,即AB+FD>AD+FB,所以 AB+AC>AD+AE .【思考】 本題還有沒有平移其他圖形的方法? 例2.如圖,梯形ABCD中,∠B+∠C=90°,點(diǎn)E、F分別為上下底邊的中點(diǎn),求證: 【解析】 題目需要證明的幾條線段是分散的,通過平移變換可以將AB、EF、DC集中到一起。此時(shí),其他條件也很能好好地得到應(yīng)用。 【答案】 證明:分別過點(diǎn)E、F作EG//AB,EH//CD交BC于點(diǎn)G、H 所以四邊形ABGE,DEHC是平行四邊形.AE=BG,DE=CH,因?yàn)镕B=FC,所以FG=FH= 所以∠EGC=∠B,∠EHB=∠C,又∠B+∠C=90°,所以∠EGC+∠EHB=90°,∠GEH=90° 所以△GEH是直角三角形.所以,EF= 二、平移變換在幾何作圖中的應(yīng)用 例3.如圖,河流的河岸AB與CD平行,點(diǎn)A、B表示兩個(gè)村莊,現(xiàn)要在河上架橋,滿足兩個(gè)條件:(1)橋與河岸垂直;(2)A、B兩個(gè)村莊之間的線路最短,請問橋應(yīng)架在何處? 【解析】 不管橋設(shè)計(jì)在何處,A、B兩個(gè)村莊之間的路程中總有一段是河岸間的距離,所以運(yùn)用平移變換,將河“平移”,使村莊A或B恰好在河岸上。 【答案】 過點(diǎn)A作AA’垂直河岸,且使AA’長度等于河的寬度,連結(jié)交河岸于點(diǎn)C,過點(diǎn)C作CD垂直于河岸交河岸于點(diǎn)D,連結(jié)AD,則CD為橋的位置。 【思考】 如果A、B兩個(gè)村莊之間有兩條互相平行的小河,其他條件不變,橋的位置又該如何確定? 圖3 例4.如圖3,△ABC的三條中線分別為AD、BE、CF.在圖3中利用圖形變換畫出并指明以AD、BE、CF的長度為三邊長的一個(gè)三角形(保留畫圖痕跡); 【解析】 以三條中線為邊長的三角形,顯然要對這三條線段進(jìn)行“重新組合”,手段就是平移變換。 【答案】 三、平移變換在幾何計(jì)算中的應(yīng)用 例5.如圖,六邊形ABCDEF中,對角線 已知FD = cm,BD = cm.問六邊形 ABCDEF的面積是多少平方厘米? 【解析】 題目中給出了很多平行且相等的線段,這就很容易聯(lián)想到平移變換。通過平移變換,將圖形“整形”,從而求出六邊形的面積。 【答案】 如圖,將△DEF平移到△BAG的位置,將△BCD平移到△GAF的位置,則原六邊形分解組合成長方形BDFG.此長方形的邊恰是已知長度的BD與 FD.易知長方形BDFG的面積為 24×28 = 432 cm2.所以,六邊形ABCDEF的面積是432 cm2.例6.已知拋物線與x軸的兩個(gè)交點(diǎn)記為A,B,點(diǎn)M在直線上,點(diǎn)P在拋物線上,求當(dāng)以O(shè)、A、P、M為頂點(diǎn)的四邊形為平行四邊形時(shí)的P點(diǎn)坐標(biāo)。 【解析】 本題運(yùn)用平移變換在平面直角坐標(biāo)系中的應(yīng)用,這樣求平行四邊形的頂點(diǎn)坐標(biāo)將會(huì)簡便。因?yàn)槠叫兴倪呅慰梢岳斫鉃橐粭l線段沿平面內(nèi)某一方向平移所掃過的圖形。 【答案】 ① 若OA為邊,則PM∥OA.設(shè)M(m,2m),∵OA=5,∴P(m+5,2m)或P(m-5,2m).當(dāng)P(m+5,2m)時(shí),∵P點(diǎn)在拋物線上,∴,解得.∴P(12,14).當(dāng)P(m-5,2m)時(shí),∵P點(diǎn)在拋物線上,∴,解得.∴P(-3,4)或P(20,50).②若OA為對角線,則PM為另一條對角線.[來源:Z&xx&k] ∵OA中點(diǎn)為(,0),設(shè)M(m,2m),∴P(5-m,-2m).∵P點(diǎn)在拋物線上,∴,解得.∴P(12,14).綜上,符合條件的P點(diǎn)共有3個(gè),它們分別是P1(12,14)、P2(-3,4)、P3(20,50).【練習(xí)】 1.已知,如圖,△ABC中,AB=AC,D是AB上一點(diǎn),E是AC延長線上一點(diǎn),若BD=CE,求證:DE>BC.2. 在△HBC中,∠B=∠C,在邊HC上取點(diǎn)D,在邊BH上取點(diǎn)A,使HD=BA,連結(jié)AD.求證:AD≥ 3.在△ABC中,點(diǎn)P為BC的中點(diǎn). (1)如圖1,求證:AP<(AB+BC); (2)延長AB到D,使得BD=AC,延長AC到E,使得CE=AB,連結(jié)DE. ①如圖2,連結(jié)BE,若∠BAC=60°,請你探究線段BE與線段AP之間的數(shù)量關(guān)系.寫出你的結(jié)論,并加以證明; ②請?jiān)趫D3中證明:BC≥DE. 六、語言表達(dá)(題型注釋) 1.把下面長句變成三個(gè)短句,不改變原意。(4分) 為期三天的從議題設(shè)置到活動(dòng)安排處處體現(xiàn)“立足亞洲、放眼全球”特色以及充分展現(xiàn)作為東道主的中國在與各國分享發(fā)展機(jī)遇、促進(jìn)亞洲共同發(fā)展、求解世界發(fā)展難題等方面的擔(dān)當(dāng)?shù)牟梺喼拚搲?013年年會(huì)4月6日拉開帷幕。 2.提取下列材料的要點(diǎn),整合成一個(gè)單句,為“黑洞”下定義。(5分)①黑洞是一種暗天體。 ②它的前身是質(zhì)量比太陽大40倍以上的恒星。 ③這種恒星在超新星爆炸中留下了一個(gè)致密的恒星核。④黑洞就是這個(gè)致密星核在自身重力下坍縮而成的。 3.將下面的長句改寫為四個(gè)短句,可以調(diào)整語序、增刪個(gè)別詞語,但不能改變原意。(5分)日前某一科學(xué)家和他的團(tuán)隊(duì)歷時(shí)多年在青海湖的裸鯉身上找到迄今為止世界上唯一的一種靈敏度高、成本低廉、培養(yǎng)速度快、保存簡單、使用方便并已經(jīng)在上海蘇州河治理、汶川水質(zhì)安全快速檢測中得到驗(yàn)證的水質(zhì)檢測好材料——非致病的淡水型發(fā)光細(xì)菌。答: 4.請根據(jù)下列語句,給“博客”下定義。要求:必須為單句,語序合理,不得丟掉語句中的信息。(可增刪詞語)(4分) ①博客是一種簡便的網(wǎng)站內(nèi)容管理系統(tǒng)。 ②博客的內(nèi)容按時(shí)間順序排列,并且在不斷更新。③博客能通過評(píng)論等形式實(shí)現(xiàn)作者與讀者的交流。④博客能提供符合通用標(biāo)準(zhǔn)的內(nèi)容提要。 5.把下面的長句改寫成幾個(gè)短句,可以改變語序或適當(dāng)增刪詞語,不得改變原意。(5分) 史詩是民間敘事體長詩中一部用詩的語言記敘各民族在特定時(shí)期的有關(guān)天地形成、人類起源的傳說,以及關(guān)于民族遷徙、民族戰(zhàn)爭和民族英雄光輝業(yè)績等重大事件且規(guī)模宏大的形象化的歷史。 6.把下列三個(gè)句子,組合成一個(gè)單句。(不得改變原意,可以調(diào)換語序,增刪一些詞語)(6分)①敘永縣教育系統(tǒng)在教育局主會(huì)場召開主題教育動(dòng)員大會(huì)。 ②此次教育活動(dòng)的主題為“實(shí)現(xiàn)偉大中國夢、建設(shè)美麗繁榮和諧四川”。③教育局全體機(jī)關(guān)職工、城區(qū)中小學(xué)校校長和黨務(wù)工作者參加了此次會(huì)議。 7.將下面一個(gè)長句變成四個(gè)短句,可增刪詞語,但不得改變原意。(4分) 由推進(jìn)艙、返回艙、軌道艙和附加段組成的中國 參考答案 1.為期三天的博鰲亞洲論壇2013年年會(huì)6日拉開帷幕。本屆年會(huì)從議題設(shè)置到活動(dòng)安排,處處體現(xiàn)了立足亞洲、放眼全球的特色。這充分展現(xiàn)出作為東道主的中國在與各國分享發(fā)展機(jī)遇、促進(jìn)亞洲共同發(fā)展、求解世界發(fā)展難題等方面的擔(dān)當(dāng)。(注:一句1分,符合邏輯順序1分。)【解析】 試題分析:這類試題解題的關(guān)鍵在于首先找出句子的主干,然后確定各主干成分的修飾語,調(diào)整語序組成小分句,最后根據(jù)邏輯順序確定分句順序。本句主語是“博鰲亞洲論壇”,謂語是“拉開帷幕”。本句特點(diǎn)是主語有多項(xiàng)定語修飾,理順主語修飾語即可整理出答案??键c(diǎn):語言表達(dá)簡明、連貫、得體、準(zhǔn)確、鮮明、生動(dòng)。能力層級(jí)為表達(dá)運(yùn)用E 2.黑洞是質(zhì)量比太陽大40倍以上的恒星在超新星爆炸中留下的致密恒星核在自身重力下坍縮而成的暗天體?!窘馕觥?/p> 試題分析:本題是一個(gè)傳統(tǒng)題型——短句變長句。為“黑洞”下定義,實(shí)際是把幾個(gè)短句組合為一個(gè)長句??梢韵冗x擇其中一個(gè)句子(①句)作為主干句,然后把其他幾個(gè)句子按照語意邏輯順序去排列,使其共同作為“暗天體”這一賓語的修飾定語即可??键c(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 3.答案示例:日前某一科學(xué)家和他的團(tuán)隊(duì)歷時(shí)多年在青海湖的裸鯉身上首次發(fā)現(xiàn)一種非致病的的淡水型發(fā)光細(xì)菌。這種細(xì)菌是一種水質(zhì)檢測好材料。它靈敏度高、成本低廉、培養(yǎng)速度快、保存簡單、使用方便。已經(jīng)在上海蘇州河治理、汶川水質(zhì)安全快速檢測中得到驗(yàn)證?!窘馕觥?/p> 試題分析:本題是將長句變換成短句,解答這種題首先要找出句子的主語、謂語、賓語、定語、狀語。再將句子的主干組成一個(gè)短句,將句子的定語或狀語組成若干個(gè)短句。 考點(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 4.博客是一種內(nèi)容按照時(shí)間順序排列,并且不斷更新,可通過評(píng)論等形式實(shí)現(xiàn)作者與讀者的交流的,能提供符合通用標(biāo)準(zhǔn)的內(nèi)容提要的網(wǎng)站內(nèi)容管理系統(tǒng)?!窘馕觥?/p> 試題分析:此題考查句式的變換,把幾個(gè)句子組合在一起變成單句。這就要注意單句的結(jié)構(gòu):??是??。可增刪個(gè)別詞語,但不能改變句意。本題包含四個(gè)信息:網(wǎng)站內(nèi)容管理系統(tǒng);按照時(shí)間順序排列,并且不斷更新;通過評(píng)論等形式實(shí)現(xiàn)作者與讀者的交流;能提供符合通用標(biāo)準(zhǔn)的內(nèi)容提要。四個(gè)信息缺一不可,并且語句要符合邏輯。考點(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E 5.①史詩是民間敘事詩中一部規(guī)模宏大的歷史。②它用詩的語言記敘各民族有關(guān)天地形成、人類起源的傳說,以及關(guān)于民族遷徙、民族戰(zhàn)爭和民族英雄光輝業(yè)績等重大事件。③它是各民族在特定時(shí)期的一部形象化的歷史。(①③合并為一句,答案共兩句的,給4分。沒提出主干句的,不給分。句子結(jié)構(gòu)混亂的,不給分。)【解析】 試題分析:解答長句變短句的題目,應(yīng)先將長句的主干分析出來,之后可將主干列為一句,枝葉列為其他幾句。本題中,材料所給的句子的主語是“史詩”,謂語部分是個(gè)比較復(fù)雜的、有較長定語的偏正短語,其中心詞是“歷史”,于是,第一個(gè)短句即可得出:“史詩是歷史?!币院笤賹δ莻€(gè)較長定于進(jìn)行分解,化成若干短句。(當(dāng)然還可有別的劃分法)考點(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 6.?dāng)⒂揽h教育系統(tǒng)在教育局主會(huì)場召開了由教育局全體機(jī)關(guān)職工、城區(qū)中小學(xué)校校長和黨務(wù)工作者參加的“實(shí)現(xiàn)偉大中國夢、建設(shè)美麗繁榮和諧四川”主題教育動(dòng)員大會(huì)。 答案第1頁,總5頁 【解析】 試題分析:這是一道復(fù)句變單句題目,此類題目一般先確立句子的主干句,即第①句“緊急避險(xiǎn)是一種行為”,然后再把其它幾句,即②③兩句,作為狀語或定語,合理刪減排序后放在賓語之前即可。 考點(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 7.神舟十號(hào)是中國第五艘搭載太空人的飛船,由推進(jìn)艙、返回艙、軌道艙和附加段組成,它由 長征二號(hào)F改進(jìn)型運(yùn)載火箭“神箭”發(fā)射升空,將在軌飛行15天。(正確拆分出四個(gè)單句2分,語序組織合理2分。)【解析】 試題分析:本題是一個(gè)傳統(tǒng)題型——長句變短句。學(xué)生可以采用主干分析法:先抽出句子主干“神舟十號(hào)飛船將在軌飛行15天”獨(dú)立成句,再將附加成分“由推進(jìn)艙、返回艙、軌道艙和附加段組成”和“中國第五艘搭載太空人”以及“由長征二號(hào)F改進(jìn)型運(yùn)載火箭“神靜”發(fā)射升空”抽出來單獨(dú)成句。這樣整個(gè)句子就變換為由四個(gè)單句構(gòu)成的句群。考點(diǎn):考查變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 8.①一代代中國人為著偉大的“中國夢”艱苦奮斗、埋頭苦干。②中國目前已經(jīng)成為世界第二大經(jīng)濟(jì)體。③中國經(jīng)濟(jì)成就舉世矚目,綜合國力今非昔比。④中國人民生活水平大幅改善,國際影響力迅速攀升?!窘馕觥?/p> 試題分析:找準(zhǔn)原句主干,先將最核心的意思提取出來,其他成分再依次抽絲剝繭,尤其要注意句中的名詞和動(dòng)詞的相互搭配。 考點(diǎn):擴(kuò)展語句,壓縮語段。能力層級(jí)為表達(dá)運(yùn)用E。 9.英國國家檔案館繼去年公開近6000頁不明飛行物(UFO)的檔案后于3月3日再次解密了35份記錄2005年以前軍方和民眾提供的目擊UFO事件的檔案資料。(句子主干1分,狀語1分,定語1分,句意通順1分)【解析】 試題分析:解答把短句變?yōu)殚L句的題目,可先根據(jù)幾個(gè)短句的內(nèi)容確定變換后句子的主干,再將各短句內(nèi)容裝入主干中。本題中前兩個(gè)句子講的是“英國國家檔案館”的兩次接連動(dòng)作,因此可考慮用“繼??之后??再次??”的句式,第③句的內(nèi)容則可作為定語嵌入句中。 考點(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。10.《游褒禪山記》是王安石在宋仁宗至和元年34歲時(shí),與兩位朋友和弟弟同游褒禪山后寫的一篇記游并抒發(fā)自己的感想的重要游記 【解析】 試題分析:此類題目要在快速閱讀整段文字,初步感知大體內(nèi)容的基礎(chǔ)上,結(jié)合具體語境,根據(jù)上下文的句子結(jié)構(gòu)、邏輯順序等來分析作答。此題可以用“《游褒禪山記》是?的一篇重要游記?!敝虚g可按照人物、時(shí)間、地點(diǎn)或者事件的順序來組織。 考點(diǎn):語言表達(dá)簡明、連貫、得體、準(zhǔn)確、鮮明、生動(dòng)。能力層級(jí)為表達(dá)運(yùn)用E 11.①我是通過一把劣質(zhì)折扇初識(shí)九華山的。 ②這把折扇是由一位到過池州的老前輩帶到鄉(xiāng)間來的。 ③折扇上印著的一幅題為“鳳凰迎客”瀏覽圖與現(xiàn)今常見的游覽圖不同。 【解析】 試題分析:長句變短的方法很多,最基本的一種就是對長附加成分進(jìn)行處理,比如本句對兩個(gè)長定語“一位老前輩帶到鄉(xiāng)間來的”“上面印著一幅與現(xiàn)今常見的游覽圖不同的題目叫 答案第2頁,總5頁 做“鳳凰迎客”瀏覽圖”進(jìn)行處理,把它分離出來,獨(dú)立成句;也可以利用復(fù)指的辦法,使句子主干突出,條理清楚;還可以重新組句,重新排序。 考點(diǎn):語言表達(dá)簡明、連貫、得體、準(zhǔn)確、鮮明、生動(dòng)。能力層級(jí)為表達(dá)運(yùn)用E。 12.①美國總統(tǒng)奧巴馬于近日簽署一項(xiàng)行政令。②決定解除對使用美國聯(lián)邦政府資金支持胚胎干細(xì)胞研究的限制。③這對科學(xué)發(fā)展而言是個(gè)好消息?!窘馕觥?/p> 試題分析:本題考查考生變換句式的能力。變換句式的基本要求是不改變原意。本題是長句變短句,這種變換的基本方法是將原句主干作為一個(gè)分句,再將原句包含主謂關(guān)系的修飾語變成分句,根據(jù)題干要求,將這幾個(gè)分句連綴起來就ok啦。本題是一個(gè)復(fù)雜單句,主干是“奧巴馬簽署行政令是好消息”,主語是主謂短語“奧巴馬簽署行政令”,行政令的內(nèi)容是“決定解除限制”。把這三個(gè)主干基本保持原意地組織起來就是答案了??键c(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。13.①開普勒采用充分利用數(shù)學(xué)對觀測結(jié)果進(jìn)行理論分析的方法、建立數(shù)學(xué)模型的方法進(jìn)行研究。②開普勒的研究對近代物理學(xué)發(fā)展產(chǎn)生了積極影響。③通過查閱大量資料,研究人員對這一事實(shí)有了更全面的認(rèn)識(shí)。【解析】 試題分析:長句變短句方法:①抽出長句的附加成分,變成復(fù)句里的分句或單獨(dú)成句。②借助復(fù)指,把長句的附加成分變?yōu)椴⒘蟹志?,然后用一個(gè)代詞去取代它。③拆開并列的修飾成分,讓其分別同中心詞搭配,形成疊用的句式,變?yōu)閺?fù)句里的幾個(gè)分句??键c(diǎn):考查變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 14.聯(lián)合國大會(huì)于16日通過了關(guān)于敘利亞局勢的決議,該決議與先前在安理會(huì)被否決的關(guān)于敘利亞問題的決議草案一樣,決議的目的是推動(dòng)敘利亞內(nèi)部政權(quán)更替和全力支持阿拉伯聯(lián)盟的行動(dòng)方案?!窘馕觥?/p> 試題分析:本題是將長句變換成短句,解答這種題首先要找出句子的主語、謂語、賓語、定語、狀語。再將句子的主干組成一個(gè)短句,將句子的定語或狀語組成若干個(gè)短句。 考點(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。15.組合類新材料作文是指近幾年高考中出現(xiàn)的,由兩個(gè)或兩個(gè)以上彼此相關(guān)的材料復(fù)合組成的,表達(dá)共同主題的,綜合性較強(qiáng)的材料作文。(每點(diǎn)1分,共5分)【解析】 試題分析:答題時(shí),要以“組合類新材料作文是指??的材料作文”這種句子形式來進(jìn)行增刪,把內(nèi)容重復(fù)的刪去,適當(dāng)增加句子的銜接詞語,按照“組合類+新材料+作文”的順序進(jìn)行組織。 考點(diǎn):語言表達(dá)簡明、連貫、得體、準(zhǔn)確、鮮明、生動(dòng)。能力層級(jí)為表達(dá)運(yùn)用E 16.世界博覽會(huì)是由一個(gè)國家的政府主辦的、有多個(gè)國家或國際組織參加的,以展現(xiàn)人類在社會(huì)、經(jīng)濟(jì)、文化和科技領(lǐng)域取得成就的舉辦時(shí)間長、展出規(guī)模大、參展國家多、影響深遠(yuǎn)的國際性大型展示會(huì)?;颍菏澜绮┯[會(huì)是以展現(xiàn)人類在社會(huì)、經(jīng)濟(jì)、文化和科技領(lǐng)域取得成就為目的,由一個(gè)國家的政府主辦的、有多個(gè)國家或國際組織參加的舉辦時(shí)間長、展出規(guī)模大、參展國家多、影響深遠(yuǎn)的國際性大型展示會(huì)?!窘馕觥?/p> 試題分析:這是一道考查壓縮語段能力的題目。答題時(shí)一要合乎書寫“定義”的要求(即用“什么是什么”的形式以一個(gè)單句表述,本題可為“世界博覽會(huì)是??展示會(huì)”的形式),二要符合題干“為‘世界博覽會(huì)’下定義”的要求,三要篩選出能體現(xiàn)“世界博覽會(huì)”的“必要的”信息,一個(gè)也不能少,也不能多。 答案第3頁,總5頁 考點(diǎn):擴(kuò)展語句,壓縮語段。能力層級(jí)為表達(dá)運(yùn)用E。17.(道德風(fēng)險(xiǎn)指)從事經(jīng)濟(jì)活動(dòng)的人在最大限度地增進(jìn)自身效用的同時(shí)做出的不利于他人的行動(dòng)?;颍?道德風(fēng)險(xiǎn)指)簽 約的一方不完全承擔(dān)風(fēng)險(xiǎn)后果時(shí)所采取的追求自身效用最大化的自私行為。(單句1分,“道德風(fēng)險(xiǎn)”特征2分,語序恰當(dāng)1分)【解析】 試題分析:概念的定義必須是一個(gè)單句,要通過分析這幾個(gè)句子的結(jié)構(gòu)及內(nèi)容來確定這個(gè)單句的主干,用簡明扼要的語言進(jìn)行概括。 考點(diǎn):語言表達(dá)簡明、連貫、得體、準(zhǔn)確、鮮明、生動(dòng)。能力層級(jí)為表達(dá)運(yùn)用E。18.(6分)(1)尼采曾把母雞下蛋的啼叫和詩人的歌唱相提并論,說都是“痛苦使然”;(2)中國傳統(tǒng)里有一個(gè)痛苦比快樂更能產(chǎn)生詩歌的意見;(3)尼采這個(gè)家常而生動(dòng)的比擬恰恰符合這個(gè)意見。【解析】 試題分析:這是一道長句變短句的題目,首先要提出句子主干,然后讓定語和狀語單獨(dú)成句即可,斷句要注意先后順序。本句句子主干是“尼采的這個(gè)家常而生動(dòng)的比擬恰恰符合中的意見”定語有“曾把母雞下蛋的啼叫和詩人的歌唱相提并論說都是‘痛苦使然’”“中國傳統(tǒng)里一個(gè)痛苦比快樂更能產(chǎn)生詩歌”,考點(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。19.①科學(xué)發(fā)展觀是堅(jiān)持以人為本和經(jīng)濟(jì)社會(huì)全面協(xié)調(diào)發(fā)展的一種方法論。②它的總體要求是實(shí)行統(tǒng)籌兼顧。③它的前提是適合中國國情和順應(yīng)時(shí)代潮流?!窘馕觥?/p> 試題分析:這是一道長句變短句的題目,首先要提出句子主干,然后讓定語和狀語單獨(dú)成句即可,斷句要注意先后順序。本句句子主干是“科學(xué)發(fā)展觀是一種方法論”定語有“適合中國國情和順應(yīng)時(shí)代潮流的前提”“按照統(tǒng)籌兼顧的總體要求”“堅(jiān)持以人為本和經(jīng)濟(jì)社會(huì)全面協(xié)調(diào)發(fā)展”,把三個(gè)定語中離中心詞最近的一個(gè)和句子主干合并??键c(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 20.(漫畫是)一種常以簡練的線條,通過變形夸張、比擬、象征等手法褒貶現(xiàn)實(shí),具有幽默感和諷刺效果的繪畫。(單句 2分,其他分句轉(zhuǎn)換成定語(意義對即可)并且位置正確各1分,共6分)【解析】 試題分析:此題要從整體上對這些句子進(jìn)行感知理解漫畫的大意,然后分別從這些分句中,選取有概括性代表性的詞句,按照一定的邏輯順序進(jìn)行組合排列即可。如可以按照“漫畫是一種?的繪畫”為句子的形式結(jié)構(gòu),中間添加定語,注意位置符合邏輯即可??键c(diǎn):擴(kuò)展語句,壓縮語段。能力層級(jí)為表達(dá)運(yùn)用E 21.示例: (1)收錄在魯迅短篇小說集《吶喊》中的中國第一部現(xiàn)代白話文小說《狂人日記》開創(chuàng)了中國新文學(xué)的革命現(xiàn)實(shí)主義傳統(tǒng)。(或:開創(chuàng)了中國新文學(xué)的革命現(xiàn)實(shí)主義傳統(tǒng)的中國第一部現(xiàn)代白話文小說《狂人日記》收錄在魯迅的短篇小說集《吶喊》中。) (2)魯迅是開創(chuàng)了中國新文學(xué)的革命現(xiàn)實(shí)主義傳統(tǒng)的、收錄在他的短篇小說集《吶喊》中的作品《狂人日記》的作者。(或:魯迅是收錄了開創(chuàng)中國新文學(xué)的革命現(xiàn)實(shí)主義傳統(tǒng)的中國第一部現(xiàn)代白話文小說《狂人日記》的短篇小說集《吶喊》的作者?!窘馕觥?/p> 試題分析:先選定一個(gè)基本句子,再將其他句子的內(nèi)容作為修飾成分插進(jìn)這個(gè)基本句中。注意改寫完后要檢查是否有語病,同時(shí)還要注意區(qū)分“以××為主語”和“用××作為開頭”的句子的區(qū)別。每個(gè)句子3分。信息完整,組織合理即可。該句不是長單句不得分,句意不 答案第4頁,總5頁 暢酌情扣分。 考點(diǎn):變換句式。能力層級(jí)為表達(dá)運(yùn)用E。22.(1)全國政協(xié)會(huì)議代表們呼吁繼續(xù)提高個(gè)稅起征點(diǎn)。(2)3月6日,國家稅務(wù)總局某官員表示不可能。(3)個(gè)稅起征點(diǎn)提高到3000元已讓納稅人的人數(shù)減少三分之二。(一句1分,不考慮三句的先后順序)【解析】 試題分析:此題考查長句變?yōu)槎叹涞哪芰?,答題時(shí),應(yīng)先明白全句包括所包括的內(nèi)容,再分別組成單句。題中句子包括的內(nèi)容有:國稅總局某官的表示、全國政協(xié)代表的呼吁和個(gè)稅起征點(diǎn)的提高所造成的結(jié)果三個(gè)方面,將此三方面內(nèi)容組成單句即可??键c(diǎn):選用、仿用、變換句式。能力層級(jí)為表達(dá)運(yùn)用E。 23.①2013年3月10日在巴渝文化會(huì)館展出的一組作品《巴渝十二景》備受好評(píng)。②這組作品取材于巴渝山水的十二處美景。 ③這十二處美景是乾隆年間巴縣知縣王爾鑒以一個(gè)外地人的視角總結(jié)出來的。 ④這組作品是由重慶著名書法家魏功欽和畫家郭俊根合作并用詩畫結(jié)合的方式創(chuàng)作的?!窘馕觥?/p> 試題分析:答題時(shí),要先瀏覽一遍長句,然后找出一些代表性的關(guān)鍵詞,進(jìn)行分類。如展出、取材、視角、創(chuàng)作方式四個(gè)方面,根據(jù)這四個(gè)方面,從長句中刪減詞語組句即可。考點(diǎn):擴(kuò)展語句,壓縮語段。能力層級(jí)為表達(dá)運(yùn)用E 答案第5頁,總5頁第二篇:二維 動(dòng)畫課課程設(shè)計(jì)題目
第三篇:計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì) 圖形繪制變換分解
第四篇:平移變換幾何證明與計(jì)算中的應(yīng)用
第五篇:長短句變換