下载此文档

DDA算法、Bresenham算法和画家算法.ppt


文档分类:IT计算机 | 页数:约25页 举报非法文档有奖
1/25
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/25 下载此文档
文档列表 文档介绍
DDA算法(Digital Differential Analyzer)
一、直线DDA算法描述
二、直线DDA算法思想
三、直线DDA算法实现
四、直线DDA算法特点
五、直线DDA算法程序
1
直线DDA算法描述
设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得
= m =直线的斜率(2-1)
可通过计算由x方向的增量△x引起y的改变来生成直线:
xi+1=xi+△x (2-2)
yi+1=yi+△y=yi+△x·m (2-3)
也可通过计算由y方向的增量△y引起x的改变来生成直线:
yi+1=yi+△y (2-4)
xi+1=xi+△x=xi+△y/m (2-5)
式(2-2)至(2-5)是递推的。
2
直线DDA算法思想
1、选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),
2、利用式(2-1)计算另一个方向的增量(△y=△x·m=m)。通过递推公式(2-2)至(2-5),把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。
之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。
另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。
3
4
直线DDA算法实现
1、已知直线的两端点坐标:(x1,y1),(x2,y2) 2、已知画线的颜色:color 3、计算两个方向的变化量:dx=x2-x1 dy=y2-y1 4、求出两个方向最大变化量的绝对值: steps=max(|dx|,|dy|) 5、计算两个方向的增量(考虑了生成方向): incx=dx/steps inxy=dy/steps 6、设置初始象素坐标:x=x1,y=y1 7、用循环实现直线的绘制: for(i=1;i<=steps;i++) { draw_pixel(x,y,color);/*在(x,y)处,以color色画点*/ x=x+incx; y=y+incy; }
5
直线DDA算法特点
该算法简单,实现容易,但由于在循环中涉及实型数的运算,因此生成直线的速度较慢。
6
Bresenham算法
由直线的斜率确定选择在x方向或y方向上每次递增(减)1个单位,另一变量的递增(减)量为0或1,它取决于实际直线与最近光栅网格点的距离,。
Bresenham算法是计算机图形学典型的直线光栅化算法,可以有效地避免使用浮点运算。
算法原理:
算法特点:
7
Bresenham算法
基本原理
假定直线斜率k在0~1之间。此时,只需考虑x方向每次递增1个单位,决定y方向每次递增0或1。

    直线当前点为(xi,y)     直线当前光栅点为(xi,yi)
则  下一个直线的点应为(xi+1,y+k)     下一个直线的光栅点为右光栅点(xi+1,yi)(y方向递增量0)         或为右上光栅点(xi+1,yi+1)(y方向递增量1)
8
记直线与它垂直方向最近的下光栅点的误差为d,有:d=(y+k)–yi,且
    0≤d≤1     当d<:下一个象素应取右光栅点(xi+1,yi)     当d≥:下一个象素应取右上光栅点(xi+1,yi+1)
Bresenham算法
9
如果直线的(起)端点在整数点上,误差项d的初值:d0=0, x坐标每增加1,d的值相应递增直线的斜率值k,即:d=d + k。 一旦d≥1,就把它减去1,保证d的相对性,且在0-1之间。
Bresenham算法
10

DDA算法、Bresenham算法和画家算法 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数25
  • 收藏数0 收藏
  • 顶次数0
  • 上传人huiwei2002
  • 文件大小228 KB
  • 时间2018-01-30