計算機圖形學課后答案-部分_第1頁
計算機圖形學課后答案-部分_第2頁
計算機圖形學課后答案-部分_第3頁
計算機圖形學課后答案-部分_第4頁
計算機圖形學課后答案-部分_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機圖形學課后答案_部分第四章1、將中點畫線算法推廣以便能畫出任意斜率的直線算法設計:(1)輸入直線的起點坐標P(x,y)和終點坐標P(x,y).000111(2)定義直線當前點坐標x和y,定義中點偏差判別式d、直線斜率k、像素點顏色rgb(3)x=x,y=y計算d=0.5-k,k=(y-y)/(x-x),rgb=RGB=(0,0,255).001010(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)如果當前點x小于(x,重復步驟(4),否則結束。1程序主要代碼: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、采用整數Bresenham算法,為一臺計算機編制直線掃描轉換程序。從鍵盤敲入兩端點坐標,就能在顯示器屏幕上畫出對應的直線。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分圓的中點算法算法設計:(1)輸入圓的半徑定義圓當前點坐標x和y、中點偏差判別式d、像素點顏色rgb(2)(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)當x小于等于y,重復步驟(4)和(5),否則結束。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、假設圓的圓心不在原點,試編寫算法對整個圓進行掃描轉換算法設計:(1)輸入圓的半徑r,圓心坐標為(xc,yc)(2)定義圓當前點坐標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)當x小于等于y,重復步驟(4)和(5),否則結束。(1)用bresenham畫圓法,設圓心坐標為(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、試編寫可以對一段任意圓弧進行掃描轉換的算法將360度的區(qū)域分成8個部分32415867編寫可以對一段任意圓弧進行掃描轉換的算法的關鍵在于,對這段圓弧的起點和終點分別判定是否在同一區(qū)域如果起點和終點在同一區(qū)域,調用中點畫圓算法,但要根據實際情況對參數進行修正;如果起點和終點不在同一區(qū)域,則要根據實際情況對圓弧段進行分割,分割的原則是將每一段的起點和終點放在同一區(qū)域,然后分別調用中點畫圓算法畫圓弧,同樣在畫的過程中,要根據實際情況對參數進行修正及算法進行修正;設圓弧的起點為(x1,y1),終點為(x2,y2),半徑為r如圖A(x1,y1)r,y0)C(x0,y0)D(x0-B(x2,y2)將整個圓弧分為兩段,弧AC和弧CB,分別進行掃描轉換,轉換過程中利用中點畫圓方法進行,代碼如下: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);//分割的圓弧數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);第六章曲線和曲面10.給定四點P1(0,0,0),P2(1,1,1),P3(2,-1,-1),P4(3,0,0),用其作為特征多邊形來構造一條三次Bezier曲線,并計算參數為0,1/3,2/3,1的值。解:三次Bezier曲線的一般式為:3223P(t)=(1-t)P+3t(1-t)P+3t(1-t)P+tPt?[01]1234其矩陣表達式為-13-31P132P(t)=[ttt1]3-630P2-3300P31000P4-13-3100032=[ttt1]3-630111-33002-1-1100030006632=>P(t)=[ttt1]0-9-9333000然后分別令t=0,1/3,2/3,1計算上述式子即可當t,0時P(0)=00010660-9-9333000=000當t,1/3時32P(1/3)=1/31/31/310660-9-9333000=12/92/9當t,2/3時32P(2/3)=(2/3)(2/3)2/310660-9-9333000=2-2/92/9當t,1時P(0)=11110660-9-9333000=30011,已知由P,0,0,0,,P,2,2,-2,,P,2,-1,-1,,P,3,0,0,,Q12341,4,0,0,,Q,6,-2,1,,Q,8,-3,2,,Q,10,0,1,確定的兩段三2341次Bezier曲線,試求其在P(Q1)處達到C連續(xù)的條件4解:設兩段連續(xù)的三次Bezier曲線分別為:P(t),Q(t)t?[01]3223則P(t1)=(1-t)P+3t(1-t)P+3t(1-t)P+tP1111211314t1?[01]3223Q(t2)=(1-t)Q+3t(1-t)Q+3t(1-t)Q+tQ2122222324t2?[01]將P、P、P、P的分量分別代入P(t)得到相應的分量12343223Px(t)=(1-t)*0+3t(1-t)*2+3t(1-t)*2+t*432=4t–6t+6t3223Py(t)=(1-t)*0+3t(1-t)*2+3t(1-t)*(-1)+t*032=9t–15t+6t3223Pz(t)=(1-t)*0+3t(1-t)*(-2)+3t(1-t)*(-1)+t*032=-3t+9t-6t即三次Bezier曲線的矩陣式為:32P(t)=[ttt1]49-30-6-159066-600000將Q、Q、Q、Q的分量分別代入Q(t)得到相應的分量12343223Qx(t)=(1-t)*4+3t(1-t)*6+3t(1-t)*8+t*10=6t+43223Qy(t)=(1-t)*0+3t(1-t)*(-2)+3t(1-t)*(-3)+t*032=3t+3t-6t3223Qz(t)=(1-t)*0+3t(1-t)*1+3t(1-t)*2+t*13=-2t+3t即三次Bezier曲線的矩陣式為:32Q(t)=[ttt1]03-2003006-63040041P(t)和Q(t)在P(Q)處達到C連續(xù)的條件是:41P(1)和Q(0)在P(Q)處重合,且其在在P(Q)處的切矢量方向相同,大小相等4141即:P(t=1)=Q(t=0)P’(t=1)=Q’(t=0)第七章2(試證明下述幾何變換的矩陣運算具有互換性:(1)兩個連續(xù)的旋轉變換;(2)兩個連續(xù)的平移變換;(3)兩個連續(xù)的變比例變換;(4)當比例系數相等時的旋轉和比例變換;(1)證明:設第一次的旋轉變換為:cosθ1sinθ10T1=-sinθ1cosθ10001第二次的旋轉變換為:Cosθ2sinθ20T2=-sinθ2cosθ20001則因為T1*T2=cosθ1sinθ10cosθ2sinθ20-sinθ1cosθ10-sinθ2cosθ20001001=cosθ1cosθ2+sinθ1sinθ2cosθ1sinθ2+sinθ1cosθ20-sinθ1cosθ2-cosθ1sinθ2-sinθ1sinθ1+cosθ1cosθ20001Cos(θ1+θ2)sin(θ1+θ2)0=-sin(θ1+θ2)cos(θ1+θ2)0001cosθ2sinθ20cosθ1sinθ10T2*T1=-sinθ2cosθ20-sinθ1cosθ10001001cosθ1cosθ2+sinθ1sinθ2cosθ1sinθ2+sinθ1cosθ20=-sinθ2cosθ1-cosθ2sinθ1-sinθ1sinθ1+cosθ1cosθ20001Cos(θ1+θ2)sin(θ1+θ2)0=-sin(θ1+θ2)cos(θ1+θ2)0001即T1*T2=T2*T1,兩個連續(xù)的旋轉變換具有互換性(2)證明:設第一次的平移變換為:100T1=010Tx1Ty11第二次的平移變換為:100T2=010Tx2Ty21則因為T1*T2=100100010010Tx1Ty11Tx2Ty21100=010Tx1+Tx2Ty1+Ty21而T2*T1=100100010010Tx2Ty21Tx1Ty11100=010Tx1+Tx2Ty1+Ty21即T1*T2=T2*T1,兩個連續(xù)的平移變換具有互換性(3)證明:設第一次的變比例變換為:Sx100T1=0Sy10001第二次的變比例變換為:Sx200T2=0Sy20001則因為T1*T2=Sx100Sx2000Sy100Sy20001001Sx1*Sx200=0Sy1*Sy20001而T2*T1=Sx200Sx1000Sy200Sy10001001Sx1*Sx200=0Sy1*Sy20001即T1*T2=T2*T1,兩個連續(xù)的變比例變換具有互換性(4)證明:設第一次為比例系數相等時的比例變換:S00T1=0S0001第二次的為旋轉變換:cosθsinθ0T2=-sinθcosθ0001則因為T1*T2=S00cosθsinθ00S0-sinθcosθ0001001ScosθSsinθ0=-SsinθScosθ20001而T2*T1=cosθsinθ0S00sinθcosθ00S0-001001ScosθSsinθ0=-SsinθScosθ0001即T1*T2=T2*T1,“當比例系數相等時的旋轉和比例“變換具有互換性3、證明二維點相對x軸作對稱,緊跟著相對y=-x直線作對稱變換完全等價于該點相對坐標原點作旋轉變換。證明:(1)點相對x軸作對稱的變換矩陣100T1=0-10001(2)相對于y=-x直線作對稱變

溫馨提示

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

評論

0/150

提交評論