freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計算機圖形學第1-5章課后習題參考答案-wenkub.com

2025-06-15 18:58 本頁面
   

【正文】 //畫出保留在窗口內(nèi)的直線 getch()。 setcolor(4)。 line(x1,y1,x2,y2)。mode,)。}。,39。 char b[4]={39。039。039。y1,amp。s2==1) line(x1,y1,x21,y21)。amp。 } if(s1==1amp。b[3]==39。b[2]==39。b[1]==39。 } if(!(b[0]==39。a[3]==39。a[2]==39。a[1]==39。 //若兩個端點的編碼全為0,則直線完全可見 else if((a[0]48)*(b[0]48)+(a[1]48)*(b[1]48)+(a[2]48)*(b[2]48)+(a[3]48)*(b[3]48)==0) { //兩端點四位編碼的邏輯乘為0 if(!(a[0]==39。amp。amp。amp。amp。amp。amp。amp。 //得到直線第一個端點的編碼 code(x2,y2,b)。 //上 return。 //右 if(yiw3) *(a+2)=39。}}void code(int xi, int yi, char *a) //四位編碼的實現(xiàn){ if(xiw1) *a=39。 yt4=160 amp。} if(xt4=270 amp。 yt3=160 amp。} if(xt3=270 amp。 yt2=160 amp。} if(xt2=270 amp。 yt1=160 amp。 } //求上交點 //有可能會求出兩個交點,例如左交點和上交點,必然有一個是超出窗口范圍的 //必須將其排除 if(xt1=270 amp。 } //求下交點 if(*(a+3)==39。 } //求右交點 if(*(a+2)==39。 } //求左交點 if(*(a+1)==39。 if(*a==39。(1) 沿X向平移20,沿Y向平移15,再繞原點旋轉(zhuǎn)90度(2) 繞原點旋轉(zhuǎn),再沿X向平移20,沿Y軸平移15解:(1)由二維圖形變換相關(guān)知識,可得變換矩陣為1 0 0 cos90 sin 90 0 0 1 00 1 0 sin90 cos90 0 = 1 0 020 15 1 0 0 1 15 20 1根據(jù)得出的新坐標可畫出圖形(圖形略)新坐標的值為[25, 30][45, 30][30, 50](2)變換矩陣為: 10 10 1 0 1 0T= 10 30 1 1 0 0 30 15 1 20 15 1 坐標數(shù)據(jù)點 變換矩陣 10 25 1T= 10 25 15 45 1由得出的新坐標畫圖(圖形略)(1) y=kx+b(2) x/a+y/b=1(a!=!=0)試求出圖形對該直線進行對稱變換得變換矩陣解:(1) kxy+b=0 α=arctg(A/B) =arctgk…………………………………………………(1) cos2α sin2α 0T= sin2α cos2α 0 ………………………………(2)(Cos2α1)C/A sin2αC/A 1將(1)代入(2)式可得變換矩陣,并根據(jù)萬能公式 sin2α =2sinαcosα cos2α =cos2αsin2α tgα =sinα/cosα 可得 (1K2)/(1+K2) 2K/(1+K2) 0T= 2K/(1+K2) (K21)/(K2+1) 0 2bK/(1+K2) 2b/(1+K2) 1(2)x/a +y/b =1bx+ayab=0所以α=arctg(A/B)=arctg(b/a)………………………………..(3)將(3)代入(2)式得 (a2b2)/(a2+b2) 2ab/(a2+b2) 0T= 2ab/(a2+b2) (b2a2)/(b2+a2) 0 2ab2/(a2+b2) 2a2b/(a2+b2) 119. 編一程序?qū)崿F(xiàn)直線的編碼裁剪法解:具體源代碼如下所示:include include include include int w1=90, w2=270, w3=40, w4=但是看看圖(b)就知道在實際上是可能的而且是經(jīng)常發(fā)生的。 closegraph()。//現(xiàn)在i是我們要找的種子點的X值 //fill the plot fill(i,j)。 } i=i+1。//記錄入棧個數(shù) //find the seed element while(igetmaxx()amp。//時延,慢慢畫 } line(px0,py0,px,py)。 line(px0,py0,px1,py1)。 pop(px0,py0)。//yi是最小Y值 push(px,py)。px,amp。//看看該多邊形究竟有幾個端點 for(i=0。ku。 printf(pleas input the number of the polygons:)。gmode,)。gdriver,amp。i++) { if(getpixel(i,y0)!=4) {} else if(getpixel(i1,y0)!=4) { push(i1,y0)。amp。amp。amp。 go2=0。ixr。//go2=1這句執(zhí)行就說明找到了最左值,并在此while中的go2==0中退出while } if(go==1amp。//若go=1這句執(zhí)行的話就說明找到了最右值,并在while中的go==0中判斷并退出while } while(xlxramp。//go2 也只是一個用來標記的變量 while(xrxlamp。 } xl=x0+1。//記錄最右值 xrold=xr。 //將該點置色 x0=x+1。 push(x,y)。 delete top。 top=stack。 stack=new_node。 new_node=new stack_list()。typedef stack_node stack_list。} //定義構(gòu)造函數(shù) int x。}[注]第2步的實現(xiàn)存在兩個問題:(1) 沒有實現(xiàn)世界坐標系統(tǒng)(第1象限)到設(shè)備坐標系統(tǒng)的轉(zhuǎn)換,所以顯示出來的圖形是以上所畫圖形的倒置,解決方法就是從世界坐標系統(tǒng)的最高y值開始掃描;(2) 由于m的取值為分數(shù)(浮點型),這就導致像素點坐標值出現(xiàn)浮點型,這樣經(jīng)過取整運算,計算出來的像素點坐標值將可能與多邊形填充點真實值之間存在偏差,導致所繪制的圖形不完全與實際吻合。 (5,10,4,6/5)。 //color用于標識填充顏色 ETint et(e)。gdriver, amp。 //進入下一條掃描線 }} void main() //主函數(shù)的實現(xiàn){ int gdriver, gmode。 while(u) { v=u。 delete w。 w=wnext。 s=0。 } //把一對相鄰結(jié)點的xi區(qū)間范圍進行填充 } if([0]!=NULL) { Enodeint *w。 f=fnext。} } } p=pnext。 if(rnext) {qnext=rnext。 qnext=r。} else { if(rxi==qxi) {qnext=rnext。 r=[0]。} //依次插入結(jié)點構(gòu)建出邊表,其中a[1]到a[10]用于構(gòu)建ET邊表 //a[0]用于構(gòu)建活動AET邊表(2) 填充函數(shù)po_fill的實現(xiàn)和主函數(shù)的實現(xiàn)include include include void po_fill(ETint amp。} //析構(gòu)函數(shù)負責回收內(nèi)存空間template class TResultCode ETT::Insert(int u, T ymax, float xi, float m){ if(u0||un1) return Failure。 while(p) { p=pnext。 for(int i=1。in。}。 ~ET()。 //ymax表示最大的y值,xi表示最底端點的x坐標值 float m。 xi=pxi。解:假設(shè)以上五個頂點依次對應(yīng)編號ABCDE,首先計算得到ET表:AEDCB…1046/5EA10151BA 610 5 4584/3DE584/3DC 3 2 1 0 用于存放AET活動邊表該多邊形的AET指針的內(nèi)容為:1 AET為空584/3DE584/3DCAET2DCDEAET54/328/34/320/353DE4/316/354/332/35DCAET46/54104/345DCEAAET5DE4/312511510BA1410BAEA6/526/510AET16BAEA6/532/510AET113107EA6/538/510AET11210BA810AET11110BAEA44/56/591010BAEA6/51010AET110具體編程實現(xiàn)如下:第1步:(1) 根據(jù)輸入的五個頂點坐標找到y(tǒng)值最小的點(例如點D,此時y=2),并找到與D有邊關(guān)系的兩個頂點(此時為E和C),在y=2處建立ET邊表記錄(ymax、xi和m值均可通過頂點坐標間的計算得到,例如DE邊的建立,特別注意:當D點和E點y坐標值相同時,也即是DE與x軸平行,該邊不能計入ET邊表),之后標記D點被訪問過;(2) 排除訪問過的點以及和該點相關(guān)聯(lián)的邊,重復(1)直至將ET表建立完善。closegraph()。 B_Spline b_sp(p,4)。 p[2].x=。 p[0].x=。graphmode,)。 putpixel(tmpx,tmpy,3)。 for(。i++) { drawCurve(i,i+1,i+2)。 //繪制多邊形 circle(bP[i].x, bP[i].y,5)。}void B_Spline::drawFrame() //其功能是繪制出多邊形和各個端點{ setcolor(12)。B_Spline::B_Spline(DPOINT* p,int len) //構(gòu)造函數(shù)的實現(xiàn){ this bP=p。 void drawCurve(int p0,int p1,int p2)。 //定義結(jié)構(gòu)體class B_Spline //定義B樣條曲線類{ private: DPOINT* bP。closegraph()。 Bezier bzr(p,10)。 p[8].x=。 p[6].x=。 p[4].x=。 p[2].x=。 p[0].x=。graphmode,E:\\tc3\\bgi)。 putpixel(tmpx,tmpy,3)。 for(。i+=3) { drawCurve(i,i+1,i+2,i+3)。 //繪制多邊形 circle(bP[i].x, bP[i].y,5)。}void Bezier::drawFrame() //其功能是繪制出多邊形和各個端點{ setcolor(12)。Bezier::Bezier(DPOINT* p,int len) //構(gòu)造函數(shù)的實現(xiàn){ this bP=p。 void drawCurve(int p0,int p1,int p2,int p3)。 //定義結(jié)構(gòu)體class Bezier //定義Bezier類{ private: DPOINT* bP。解:用矩陣表示為p(t)=[t3 t2 t 1]P[p0 p1
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1