为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

计算机图形学课后答案_部分

2017-10-07 22页 doc 48KB 269阅读

用户头像

is_348501

暂无简介

举报
计算机图形学课后答案_部分计算机图形学课后答案_部分 第四章 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 x1) { If (d<0) { x++; y++; d+ = delt...
计算机图形学课后答案_部分
计算机图形学课后答案_部分 第四章 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) { int a,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 x1) { If (d<0) { x++; y++; d+ = delta2; } Else { X++; D+=delta1; } Putpixel(x,y,color); } Else While (x=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) int r, color; { float x,y; float d; x=0; y=r; d=1.25 –r/1.414; drawpixel(x, y, color); while (x=0) { drawpixel(x,y,color); if (delta<0) { delta1=2*(delta+y-b)-1; if (delta1<=0) direction=1; else direction=2; } else if (delta>0) { delta2=2*(delta-x+xc)-1; if (delta2<=0) direction=2; else direction=3; } else direction=2; switch (direction) { case 1:x++; delta+=2*(x-xc)+1; break; case 2:x++; y++; delta+=2*(x-a-y+yc+1); break; case 3:y--; delta+=-2*(y-yc)+1; break; } } } (2) 采用中点画圆算法 #include #include #include MidpointCircle(r,color) int r, color; { float x,y; float d; x=0; y=r; d=1.25 –r/1.414; putpixel(xc+x, yc+y, color); while (x方法
进行,代码如下: midpoint(x1,y1,x2,y2,r,color,k) { int x,y; float d; 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
达式为 -1 3 -3 1 P1 32 P(t)=[t t t 1] 3 -6 3 0 P2 -3 3 0 0 P3 1 0 0 0 P4 -1 3 -3 1 0 0 0 32 = [t t t 1] 3 -6 3 0 1 1 1 -3 3 0 0 2 -1 -1 1 0 0 0 3 0 0 0 6 6 32 => P(t)=[t t t 1] 0 -9 -9 3 3 3 0 0 0 然后分别令t=0, 1/3, 2/3, 1 计算上述式子即可 当t,0时 P(0)= 0 0 0 1 0 6 6 0 -9 -9 3 3 3 0 0 0 = 0 0 0 当t,1/3时 32 P(1/3)= 1/3 1/3 1/3 1 0 6 6 0 -9 -9 3 3 3 0 0 0 = 1 2/9 2/9 当t,2/3时 32 P(2/3)= (2/3) (2/3) 2/3 1 0 6 6 0 -9 -9 3 3 3 0 0 0 = 2 -2/9 2/9 当t,1时 P(0)= 1 1 1 1 0 6 6 0 -9 -9 3 3 3 0 0 0 = 3 0 0 11,已知由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,确定的两段三234 1次Bezier曲线,试求其在P(Q1)处达到C连续的条件 4 解:设两段连续的三次Bezier曲线分别为: P(t), Q(t) t?[0 1] 3223 则 P(t1)=(1-t)P+3t(1-t)P+3t(1-t)P+tP1111211314 t1?[0 1] 3223 Q(t2)=(1-t)Q+3t(1-t)Q+3t(1-t)Q+tQ 2122222324 t2?[0 1] 将P、P、P、P的分量分别代入P(t)得到相应的分量 12343223 Px(t)= (1-t)*0 + 3t(1-t)*2 + 3t(1-t)*2 + t*4 32 = 4t – 6t + 6t 3223 Py(t)= (1-t)*0 + 3t(1-t)*2 + 3t(1-t)*(-1) + t*0 32 = 9t – 15t + 6t 3223 Pz(t)= (1-t)*0 + 3t(1-t)*(-2) + 3t(1-t)*(-1) + t*0 32 = -3t + 9t - 6t 即三次Bezier曲线的矩阵式为: 32 P(t)= [t t t 1] 4 9 -3 0 -6 -15 9 0 6 6 -6 0 0 0 0 0 将Q、Q、Q、Q的分量分别代入Q(t)得到相应的分量 12343223 Qx(t)= (1-t)*4 + 3t(1-t)*6 + 3t(1-t)*8 + t*10 = 6t + 4 3223 Qy(t)= (1-t)*0 + 3t(1-t)*(-2) + 3t(1-t)*(-3) + t*0 32 = 3t + 3t - 6t 3223 Qz(t)= (1-t)*0 + 3t(1-t)*1 + 3t(1-t)*2 + t*1 3 = -2t + 3t 即三次Bezier曲线的矩阵式为: 32 Q(t)= [t t t 1] 0 3 -2 0 0 3 0 0 6 -6 3 0 4 0 0 4 1 P(t)和Q(t)在P(Q)处达到C连续的条件是: 41 P(1)和Q(0) 在P(Q)处重合,且其在在P(Q)处的切矢量方向相同,大小相等 4141 即: P(t=1) =Q(t=0) P’(t=1)=Q’(t=0) 第七章 2(试下述几何变换的矩阵运算具有互换性: (1)两个连续的旋转变换;(2)两个连续的平移变换; (3)两个连续的变比例变换;(4)当比例系数相等时的旋转和比例变换; (1)证明:设第一次的旋转变换为: cosθ1 sinθ1 0 T1= - sinθ1 cosθ1 0 0 0 1 第二次的旋转变换为: Cosθ2 sinθ2 0 T2= - sinθ2 cosθ2 0 0 0 1 则因为 T1*T2 = cosθ1 sinθ1 0 cosθ2 sinθ2 0 - sinθ1 cosθ1 0 - sinθ2 cosθ2 0 0 0 1 0 0 1 = cosθ1 cosθ2+sinθ1 sinθ2 cosθ1 sinθ2+ sinθ1 cosθ2 0 - sinθ1 cosθ2- cosθ1 sinθ2 -sinθ1 sinθ1+ cosθ1 cosθ2 0 0 0 1 Cos(θ1+θ2) sin(θ1+θ2) 0 = - sin(θ1+θ2) cos(θ1+θ2) 0 0 0 1 cosθ2 sinθ2 0 cosθ1 sinθ1 0 T2*T1 = - sinθ2 cosθ2 0 - sinθ1 cosθ1 0 0 0 1 0 0 1 cosθ1 cosθ2+ sinθ1 sinθ2 cosθ1 sinθ2+ sinθ1 cosθ2 0 = - sinθ2cosθ1- cosθ2 sinθ1 -sinθ1 sinθ1+ cosθ1 cosθ2 0 0 0 1 Cos(θ1+θ2) sin(θ1+θ2) 0 = - sin(θ1+θ2) cos(θ1+θ2) 0 0 0 1 即T1*T2= T2*T1, 两个连续的旋转变换具有互换性 (2)证明:设第一次的平移变换为: 1 0 0 T1= 0 1 0 Tx1 Ty1 1 第二次的平移变换为: 1 0 0 T2= 0 1 0 Tx2 Ty2 1 则因为 T1*T2 = 1 0 0 1 0 0 0 1 0 0 1 0 Tx1 Ty1 1 Tx2 Ty2 1 1 0 0 = 0 1 0 Tx1+Tx2 Ty1+Ty2 1 而 T2*T1 = 1 0 0 1 0 0 0 1 0 0 1 0 Tx2 Ty2 1 Tx1 Ty1 1 1 0 0 = 0 1 0 Tx1+Tx2 Ty1+Ty2 1 即T1*T2= T2*T1, 两个连续的平移变换具有互换性 (3)证明:设第一次的变比例变换为: Sx1 0 0 T1= 0 Sy1 0 0 0 1 第二次的变比例变换为: Sx2 0 0 T2 = 0 Sy2 0 0 0 1 则因为 T1*T2 = Sx1 0 0 Sx2 0 0 0 Sy1 0 0 Sy2 0 0 0 1 0 0 1 Sx1*Sx2 0 0 = 0 Sy1*Sy2 0 0 0 1 而 T2*T1 = Sx2 0 0 Sx1 0 0 0 Sy2 0 0 Sy1 0 0 0 1 0 0 1 Sx1*Sx2 0 0 = 0 Sy1*Sy2 0 0 0 1 即T1*T2= T2*T1, 两个连续的变比例变换具有互换性 (4)证明:设第一次为比例系数相等时的比例变换: S 0 0 T1= 0 S 0 0 0 1 第二次的为旋转变换: cosθ sinθ 0 T2= - sinθ cosθ 0 0 0 1 则因为 T1*T2 = S 0 0 cosθ sinθ 0 0 S 0 - sinθ cosθ 0 0 0 1 0 0 1 S cosθ S sinθ 0 = - S sinθ S cosθ2 0 0 0 1 而 T2*T1 = cosθ sinθ 0 S 0 0 sinθ cosθ 0 0 S 0 - 0 0 1 0 0 1 S cosθ S sinθ 0 = -S sinθ S cosθ 0 0 0 1 即T1*T2= T2*T1, “当比例系数相等时的旋转和比例“变换具有互换性 3、证明二维点相对x轴作对称,紧跟着相对y=-x直线作对称变换完全等价于该 点相对坐标原点作旋转变换。 证明: (1) 点相对x轴作对称的变换矩阵 1 0 0 T1= 0 -1 0 0 0 1 (2) 相对于y=-x直线作对称变换矩阵 0 -1 0 T2= -1 0 0 0 0 1 1 0 0 0 -1 0 0 -1 0 因为 T1*T2= 0 -1 0 * -1 0 0 = 1 0 0 0 0 1 0 0 1 0 0 1 cos(-90º) sin(-90 º) 0 = - sin(-90 º) cos(-90º) 0 0 0 1 即该点相对坐标原点作顺时针方向转90 º的旋转变换 4、证明 2 1-t 2t 2 2 1+ t1+t T= 完全表示一个旋转变换。 2 -2t 1-t 2 2 1+t1+t 证明:令t=tg(θ/2) 2 21-t,/(1+ t)= cosθ则:, 2,2t,/(1+ t)= sinθ 即 cosθ sinθ T= - sinθ cosθ 将T扩充为一个三行齐次坐标的变换矩阵为: cosθ sinθ 0 T= - sinθ cosθ 0 0 0 1 该矩阵表示为一个旋转变换 5、例:三角形ABC各顶点坐标为A(3,0)B(4,2)C(6,0),其绕原点逆时针旋转90?,再向X方向平移2,Y方向平移-1。 解:因为:θ=90? 变换矩阵为 COS90? SIN90? 0 0 1 0 TR= - SIN90? COS90? 0 = -1 0 0 2 -1 1 2 -1 -1 则 A 3 0 1 0 1 0 2 2 1 A‘ B 4 2 1 -1 0 0 = 0 3 1 B‘ C 6 0 1 2 -1 1 2 5 1 C‘ 如果先进行平移变换,再进行旋转变换, 1 0 0 COS90? SIN90? 0 0 1 0 Tr= 0 1 0 - SIN90? COS90? 0 = -1 0 0 2 -1 1 0 0 1 1 2 1 则 A 3 0 1 0 1 0 1 5 1 A‘ B 4 2 1 - 1 0 0 = -1 6 1 B‘ C 6 0 1 1 2 1 1 8 1 C‘ 结论:变换顺序不同,结果也不同
/
本文档为【计算机图形学课后答案_部分】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
相关资料
热门搜索
你可能还喜欢

历史搜索

    清空历史搜索