77范文网 - 专业文章范例文档资料分享平台

计算机图形学课后题答案--许长青、许志闻(2)

来源:网络收集 时间:2018-12-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

?xm?(x1?x2)/2?(x1i?x2i)/2ym?(y1?y2)/2?(y1i?y2i)/2?x2i?x1?x2?x1iy2i?y1?y2?y1ivoid SymmetryBresenhamLine(int x1,int y1,int x2,int y2) { int x,y,dx,dy,p,xmin,ymin,xmax,ymax; xmin=min(x1,x2); xmax=max(x1,x2); ymin=min(y1,y2); ymax=max(y1,y2); x=xmin; y=ymin; dx=xmax-xmin; dy=ymax-ymin; if(dx>dy) { p=2*dy-dx; for(;(x+x)<=(xmin+xmax);x++) { SetPixel(x,y,RGB(0,0,0)); SetPixel((xmin+xmax)-x,(ymin+ymax)-y,RGB(0,0,0)); if(p>=0) { y++; p+=2*(dy-dx); } else { p+=2*dy; } } } else { p=2*dx-dy; for(;(y+y)<=(ymin+ymax);y++) { SetPixel(x,y,RGB(0,0,0)); SetPixel((xmin+xmax)-x,(ymin+ymax)-y,RGB(0,0,0)); if(p>=0) { x++; p+=2*(dx-dy);

} else { p+=2*dx; } } } }

当Δx和Δy有最大公因数c,而且Δx/c为偶数和Δy/c为奇数时,和当Δx是2Δy的整数倍时,对称性算法画出的线与Bresenham直线算法画出的线不一致。

例如:端点为(0,0)和(4,3)的线段(Δx/c为偶数和Δy/c为奇数) 用Bresenham直线算法画线 (0,0)(1,1)(2,2)(3,2)(4,3) 用对称性算法画线

(0,0)(4,3)(1,1)(3,2)(2,2)(2,1)

端点为(0,0)和(6,3)的线段(Δx是2Δy的整数倍) 用Bresenham直线算法画线 (0,0)(1,1)(2,1)(3,2)(4,2)(5,3)(6,3) 用对称性算法画线

(0,0)(6,3)(1,1)(5,2)(2,1)(4,2)(3,2)(3,1)

6.推广本章第二节给出的Bresenham画圆算法使能够画出一个内部填充的实心圆。 填充实心圆算法

y y=-x y=x x

void SolidBresenhamCircle(int x0,int y0,int R,COLORREF color) { int x,y,p,i; x=0; y=R; p=3-2*R; for(;x<=y;x++) { for(i=-x;i<=x;i++) { SetPixel(x0+i,y0+y,color); SetPixel(x0+i,y0-y,color); } for(i=-y;i<=y;i++) { SetPixel(x0+i,y0+x,color); SetPixel(x0+i,y0-x,color); } if(p>=0) { p+=4*(x-y)+10; y--; } else { p+=4*x+6; }

} }

7.设像本章第二节那样要画出圆心在原点,半径为R,从点(0,R)开始顺时针走向的1/8圆弧,可采用如下循环内已经没有乘法的算法:

(1)[准备] e←1-R,u←l,v←1-2R,x←0,y←R; (2)[逐点画圆] 若x≥y到(3),否则做: a)画点(x,y),x←x+1, u←u +2;

b)若e<0则v←v +2,e←e + u,否则v←v +4,e←e +v,y←y -1; c)返回步(2)开头。

(3)[结束]若x=y则画点(x,y)后结束,否则直接结束。

试以R=10为例分别运行Bresenham算法和这个算法,验证关系p=2e+1,然后解释这个算法所依据的理由。

以R=10为例分别运行Bresenham算法和这个算法,有 (1) Bresenham算法 x=0,y=10,p=-17 x=1,y=10,p=-11 x=2,y=10,p=-1 x=3,y=10,p=13 x=4,y=9,p=-5 x=5,y=9,p=17 x=6,y=8,p=11 x=7,y=7,p=13

x y p (x,y) 0 10 -17 (0,10) 1 10 -11 (1,10) 2 10 4 5 6 7

(2) 题中算法

x=0,y=10,e=-9,u=1,v=-19 x=1,y=10,e=-6,u=3,v=-17 x=2,y=10,e=-1,u=5,v=-15 x=3,y=10,e=6,u=7,v=-13 x=4,y=9,e=-3,u=9,v=-9 x=5,y=9,e=8,u=11,v=-7 x=6,y=8,e=5,u=13,v=-3 x=7,y=7,e=6,u=15,v=1

9 9 8 7 -1 5 17 11 13 (2,10) (4,9) (5,9) (6,8) (7,7) 3 10 13 (3,10)

x y e u 1 3 5 7 9 v (x,y) 0 10 -9 1 10 -6 2 10 -1 3 10 6 4 5 6 7 9 9 8 7 -3 -19 (0,10) -17 (1,10) -15 (2,10) -13 (3,10) -9 -7 -3 1 (4,9) (5,9) (6,8) (7,7) 8 11 5 13 6 15

通过例子可以看出p=2e+1

算法的依据:p的初值为奇数(p=3-2*R),而p的每次增量都为偶数, p+=4*(x-y)+10; p+=4*x+6;

所以p在整个计算过程中始终为奇数。于是当p=2e+1时,有 p≥0当且仅当e≥0;p<0当且仅当e<0(实际上p不可能为0) 所以,p与e有相同的符号,可以作为判别式使用。 将p=2e+1代入到pi?1?pi??p,有

2ei?1?1?2ei?1??p

整理得

ei?1?ei??p/2?ei??e

所以,有

?e??p/2

当e≥0(p≥0)时,

v??e??p/2?(4*(x?y)?10)/2?2*(x?y)?5; (1)

当e<0(p<0)时,

u??e??p/2?(4*x?6)/2?2*x?3。 (2)

起点为(0,R),所以v的初值为v?2*(0?R)?5??2*R?5(由程序中的初始化v←1-2R和循环中的v←v +4完成);u的初值为u?2*0?3?3(由程序中的初始化u←1和循环中的u←u +2完成)。

再讨论v和u的增量。根据等式(1)和(2),当e≥0(p≥0)时,x增1,y减1,则v递增4,u递增2;当e<0(p<0)时,x增1,y不变,则v递增2,u递增2。所以得到题设中的算法。

8.本章第三节叙述了使用活跃边表的多边形扫描转换算法中ET表的填写方法。试写

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机图形学课后题答案--许长青、许志闻(2)在线全文阅读。

计算机图形学课后题答案--许长青、许志闻(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/366940.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: