DDA算法Bresenham算法和画家算法.ppt
《DDA算法Bresenham算法和画家算法.ppt》由会员分享,可在线阅读,更多相关《DDA算法Bresenham算法和画家算法.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、直线直线DDA算法描述算法描述设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得 = m =直线的斜率 (21)可通过计算由x方向的增量x引起y的改变来生成直线:xi+1=xi+x (22)yi+1=yi+y=yi+xm (23)也可通过计算由y方向的增量y引起x的改变来生成直线:yi+1=yi+y (24)xi+1=xi+x=xi+y/m (25)式(22)至(25)是递推的。直线直线DDA算法思想算法思想1、选定x2x1和y2y1中较大者作为步进方向(假设x2x1较大),取该方向上的增量为一个象素单位(x=1),2、利用式(21)计算另一个方向的增量(y=x
2、m=m)。通过递推公式(22)至(25),把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。之所以取x2x1和y2y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。另外,算法实现中还应注意直线的生成方向,以决定x及y是取正值还是负值。直线直线DDA算法实现算法实现1、已知直线的两端点坐标:(x1,y1),(x2,y2)2、已知画线的颜色:color3、计算两个方向的变化量:dx=x2x1 dy=y2y14、求出两个方向最大变化量的绝对值: steps=max(|dx|,|dy|)5、计算两个方向的增量(考虑了生成方向): incx=d
3、x/steps inxy=dy/steps6、设置初始象素坐标:x=x1,y=y17、用循环实现直线的绘制:for(i=1;i=steps;i+) draw_pixel(x,y,color);/*在(x,y)处,以color色画点*/x=x+incx; y=y+incy; 直线直线DDA算法特点算法特点 该算法简单,实现容易,但由于在循环中涉及实型数的运算,因此生成直线的速度较慢。Bresenham算法由直线的斜率确定选择在x方向或y方向上每次递增(减)1个单位,另一变量的递增(减)量为0或1,它取决于实际直线与最近光栅网格点的距离,这个距离的最大误差为0.5。 Bresenham算法是计算机
4、图形学典型的直线光栅化算法,可以有效地避免使用浮点运算。算法原理: 算法特点:Bresenham算法基本原理基本原理假定直线斜率k在01之间。此时,只需考虑x方向每次递增1个单位,决定y方向每次递增0或1。 设 直线当前点为(xi,y) 直线当前光栅点为(xi,yi)则 下一个直线的点应为(xi+1,y+k) 下一个直线的光栅点为右光栅点(xi+1,yi)(y方向递增量0) 或为右上光栅点(xi+1,yi+1)(y方向递增量1) 记直线与它垂直方向最近的下光栅点的误差为d,有:d=(y+k)yi,且 0d1 当d0.5:下一个象素应取右光栅点(xi+1,yi) 当d0.5:下一个象素应取右上光
5、栅点(xi+1,yi+1)Bresenham算法如果直线的(起)端点在整数点上,误差项d的初值:d00,x坐标每增加1,d的值相应递增直线的斜率值k,即:dd + k。一旦d1,就把它减去1,保证d的相对性,且在0-1之间。Bresenham算法Bresenham算法令e=d-0.5,关于d的判别式和初值可简化成: e的初值e0= -0.5,增量亦为k; e0时,取当前象素(xi,yi)的右上方象素(xi+1,yi+1); e=0时,可任取上、下光栅点显示。Bresenham算法的构思巧妙:它引入动态误差e,当x方向每次递增1个单位,可根据e的符号决定y方向每次递增 0 或 1。 e0,y方向
6、递增1 x方向每次递增1个单位,e = e + k因为e是相对量,所以当e0时,表明e的计值将进入下一个参考点(上升一个光栅点),此时须:e = e - 1Bresenham算法 通过(0,0)的所求直线的斜率大于0.5,它与x=1直线的交点离y=1直线较近,离y=0直线较远,因此取光栅点(1,1)比(1,0)更逼近直线;如果斜率小于0.5,则反之;当斜率等于0.5,没有确定的选择标准,本算法选择(1,1) 1)Bresenham算法的实施Rogers 版Bresenham算法x=x1y=y1dx = x2 x1dy = y2 y1/初始化误差eError =dy/dx-0.5/begin t
7、he main loopfor i=1 to dx WritePixel (x, y, value) if (Error 0) then /判断斜率是否大于0.5 y=y+1 Error = Error -1 end if x=x+1 Error = Error +dy/dxnext ifinish 1)Bresenham算法的实施Rogers 版Bresenham算法2)整数Bresenham算法 上述Bresenham算法在计算直线斜率和误差项时要用到浮点运算和除法,采用整数算术运算和避免除法可以加快算法的速度。 由于上述Bresenham算法中只用到误差项(初值Error =dy/dx-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDA 算法 Bresenham 画家
限制150内