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

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

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

习题解答 第2章

2.如果线段端点坐标值不是整数,采用DDA算法产生的直线和将端点坐标值先取整再用Bresenham算法产生的直线是否完全相同?为什么?能否扩充整数Bresenham算法使之能处理当线段端点坐标值不是整数的情况(比端点坐标先取整数产生的直线更精确)。

如果线段端点坐标值不是整数,DDA算法和Bresenham算法产生的直线不完全相同。DDA算法是在直线附近寻找最靠近直线的象素点。而端点坐标值先取整再用Bresenham算法,因为端点坐标值先取整,与原直线相比,可能会改变直线的斜率。因此两种算法相比,前者比后者更精确。

可以将整数Bresenham算法扩充为实数Bresenham算法。算法中的变量都应采用实数类型,在绘制时再对实数坐标值取整数,这样做比端点坐标先取整数产生的直线更精确,具体算法如下:

void BresenhamLine(double x1, double y1, double x2, double y2) { int x,y ; double dx,dy,p; x=(int)(x1+0.5); y=(int)(y1+0.5); dx=x2-x1; dy=y2-y1; p=2*dy*(x-x1+1)-dx*(2*y-2*y1+1); for(;x<=x2;x++) { SetPixel(x,y); if(p>=0) { y++; p+=2*(dy-dx); } else { p+=2*dy; } } }

3.推广本章第一节给出的产生线段的整数Bresenham算法,去掉0≤m≤1和xl

dy(x??x)?b?ydxdyd2?y??y?(x??x)?bdxpi?dx(d1?d2)?2dy(x??x)?2(b?yi)dx??ydx d1?pi?1?2dy(x?2?x)?2(b?yi?1)dx??ydx?p?2dy?x?2(yi?1?yi)dx若pi?0,则yi?1?y??y,?p?2dy?x?2dx?y;若pi?0,则yi?1?y?0,

?p?2dy?x。

m 0≤m≤1 Δx Δy Δp(p≥0) >0 >0 <0 <0 -1≤m≤0 >0 <0 <0 >0 m>1 >0 >0 <0 <0 m<-1 >0 <0 <0 >0 Δp(p<0) ?p?2dy?2dx ?p?2dy ?p??2dy?2dx ?p??2dy ?p?2dy?2dx ?p??2dy ?p??2dy?2dx ?p?2dy ?p?2dx?2dy ?p?2dx ?p??2dx?2dy ?p??2dx ?p?2dx?2dy ?p??2dx ?p??2dx?2dy ?p?2dx void BresenhamLine(int x1,int y1,int x2,int y2) { int x,y,dx,dy,p,xmin,ymin,xmax,ymax,lx,ly,deltax,deltay; dx=x2-x1; dy=y2-y1; xmin=min(x1,x2); xmax=max(x1,x2); ymin=min(y1,y2); ymax=max(y1,y2); lx=xmax-xmin; ly=ymax-ymin; deltax= (dx==0)?0:(dx>0?1:-1); deltay= (dy==0)?0:(dy>0?1:-1);

x=x1; y=y1; if(lx>ly) { p=2*dy-dx; for(;x!=x2;x+=deltax) { SetPixel(x,y,RGB(0,0,0)); if(p>=0) { y+=deltay; p+=2*(ly-lx); } else { p+=2*ly; } } } else { p=2*dx-dy; for(;y!=y2;y+=deltay) { SetPixel(x,y,RGB(0,0,0)); if(p>=0) { x+=deltax; p+=2*(lx-ly); } else { p+=2*lx; } } } }

4.在本章第一节说明Bresenham算法如何选择下一个象素点位置的图2.3中,其实是假定了在当前选择的点是(x,y)时,真正直线与横坐标为x+1的直线的交点是在y到y+1之间。如果不是这样,而是下面两种情况:

(1)在y到y-1之间。例如从(0,0)到(7,2)的直线,在点(2,1)处向后。 (2)在y+1到y+2之间,例如从(0,0)到(7,5)的直线,在点(2,1)处向后。 试说明为什么对所列两种情况算法仍能正确地工作。

假定0≤m≤1,如图所示

d1

d2

d1

(x,y) d2

若当前象素点是(x,y),则该直线与横坐标为x的直线的交点必落在(x,y-0.5),(x,y+0.5)之间。又由于0≤m≤1,则该直线与横坐标为x+1的直线的交点必落在(x+1,y-0.5),(x+1,y+1.5)之间。

情况(1),交点在y-0.5到y之间,d1<0,d2>0,则Δ=Δx (d1-d2)<0,应取(x+1,y);

情况(2),交点在y+1到y+1.5之间,d1>0,d2<0,则Δ=Δx (d1-d2)>0,应取(x+1,y+1。 以上结果是根据算法而得到的,同时该结果也符合实际的绘制。 综上,当交点在在y-0.5到y之间,四舍五入取象素点(x+1,y);当交点在在y+1到y+1.5之间,四舍五入取象素点(x+1,y+1)。

5.本章介绍的Bresenham直线算法是否可以利用对称性,通过判别量p同时从直线两端向中心画线?当0<Δy<Δx,Δx和Δy有最大公因数c,而且Δx/c为偶数和Δy/c为奇数时,两种方法画出的线是否一致?当Δx是2Δy的整数倍时两种方法画出的线是否一致。

求对称点的推导:设中点坐标为(xm,ym),端点坐标为(x1,y1)和(x2,y2),已知一点坐标为(x1i,y1i),其对称点坐标为(x2i,y2i)

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

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