- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学基础课程设计1.设计要求1、给出系统框架;2、调用画点的函数,分别用DDA、中点Bresenham算法和改进Bresenham算法绘制直线和中点算法绘制直线、用不同的算法绘制圆和椭圆 ,并各自比较算法精度与效率的差别 ;3、实现二维图形的变换。(包括平移,放缩,旋转,错切以及复合变换);4、运用所学的多边形扫描算法实现多边形的扫描转换;5、运用所学的区域填充算法实现区域填充;6、运用所学算法实现线段裁剪以及多边形裁剪(多边形裁剪为可选);7、自己实现其它附加以及需要完善的功能模块;2.程序算法及原理2.1扫描转换直线段2.1.1 DDA算法扫描转换直线段:算法步骤:已知过端点P0 (x0, y0), P1(x1, y1)的直线段L:y=kx+b,直线斜率为,这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。 计算yi+1= kxi+1+b= kxi+b+kDx= yi+kDx当Dx =1;yi+1 = yi+k 即:当x每递增1,y递增k(即直线斜率);注意上述分析的算法仅适用于|k| ≤1的情形。在这种情况下,x每增加1,y最多增加1。当 |k| 1时,必须把x,y地位互换2.1.2、中点算法扫描转换直线段:算法步骤:中点画线算法的原则是:如下图所示,但斜率K1时,选定一个点之后,再计算中点M。如果M0,这线更靠近E点,下一点选择为E点。反之选择NE点。首先:f(x,y) = ax+by+c=0,且?y = dy/dx *x + B,?so : f(x,y) = dy*x-dx*y+Bdx =0so: a = dy, b = -dx, c = Bdx.假设,已经选定P点,应用中点法则选择下一点是,我们只要计算f(x+1,y+1/2),并考察是正数还是负数。我们定义d=f(x+1,y+1/2)=a(x+1)+b(y+1/2)+c.这样,对于d0,d0,我们只要选择NE点和E点就可以了。这边假设选定为E点,那么中点M的位置怎么变化和d的值如何变化呢?显然M就沿着x轴递增一步。此时:d1 = f(x+2,y+1/2)从d1中减去d,可以得到一个增量差。d1= a = dy。同理:如果选定下一点为NE点,d2 = a+b = dy-dx。基于上面的讨论,增量的中点技术可以概括为:在每一步,我们根据上一步所得到的增量的符号去选择下一个像素点。然后根据说选择的像素,判定变量增加相应的增量差d1或d2。对于初始值,我们选择第一个端点为(x0,y0)。则M为(x0+1,y+1/2).f(x0+1,y0+1/2) = f(x0,y0)+a+b/2.?故: d0 = a+b/2 = dy - dx/2为去掉d0中的小数,我们对d0进行放大。(在方程两边同乘于2)d0 = 2*dy – dx d1 = 2*dy d2 = 2*(dy-dx)2.1.3、Breshenham算法扫描转换直线段:算法步骤:假定直线的起点、终点分别为:(x1,y1), (x2,y2),且都为整数。则直线方程为y=mx+b,其中b=y1-mx1,m=dy/dx,当x每递增1,y递增k(即直线斜率)取yi+1,yi由d1,d2的大小决定y=m(xi+1)+b, d1=y- yi, d2= yi+1–y,当d1- d20 , ;当d1- d20 ,;d1-d2=2y-2yi-1=2dy/dx(xi+1)+2b-2yi-1, dx(d1- d2)= 2dy(xi+1)+2bdx-2yidx-dx,设pi =dx(d1- d2) ,则pi = 2xidy-2yidx +2dy+2bdx-dx (1)则pi+1 = 2(xi+1)dy-2yi+1dx +2dy+2bdx-dx pi+1 =2dy-2(yi+1-yi)dx+ pi;当pi 0时 yi+1= yi+1 , pi+1 =2dy-2dx+ pi当pi 0时 yi+1= yi , pi+1 =2dy+ pi初值p1 = 2x1dy-2y1dx +2dy+2bdx-dx 因为y1dx=x1dy+bdx ;所以p1 = 2x1dy-2(x1dy+bdx) +2dy+2bdx-dx =2dy-dx总结: p1 =2dy-dx dx=x2-x1, dy=y2-y1当p1 0时 p2= p1 + 2dy-2dx当p1 0时 p2= p1 + 2dy,由此得出算法。2.2扫描转换圆弧2.2.1、扫描转换生成圆算法步骤: 利用圆的对称性,只须讨论1/8圆。P为当前点亮象素,那么,下一个点亮的象素可能是P1(Xp+1,Yp)或P2(Xp +1,Yp -1)。 构造函数:F(X,Y)=X2 + Y2 - R2 ;则 F(X,Y)= 0 (X,Y)在圆上; F(X,Y) 0
文档评论(0)