dda直线算法生成
数学与计算科学学院
实 验 报 告
实验项目名称 线的生产
所属课程名称 计算机图形学
实 验 类 型 验证型
实 验 日 期 2015—4—13
班 级 信计 12-2
学 号 201253100212
姓 名 黄全林
成 绩
一、实验概述:
【实验目的】
1、理解直线生成的基本算法。如:直线 DDA 算法、直线 Breseham 等;
2、掌握直线生成的基本程序实现。
【实验原理】
直线生的 DDA 算法基本原理
1. 直线 DDA 的描述
设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程
得
dyy2? y 1 ? y
? ? ?m ? 直线斜率 (1)
dx x2? x 1 ? x
可通过计算由 x 方向的增量△x 引起 y 的改变来生成直线:
?xi?1 ? x i ? ? x
? (2)
?yi?1 ? y i ? ? x ? y i ? ? xm
也可以通过向 y 方向实现
?yi?1 ? y i ? ? y
? (3)
?xi?1 ? x i ? ? x ? x i ? ? ym
通过(2)式递推就能实现直线的绘制。
?yi?1 ? y i ? ? y
?
?xi?1 ? x i ? ? x ? x i ? ? ym
2. 直线 DDA 算法思想
x x y y x x
选定 2? 1 和 2? 1 中较大者作为步进方向(假设 2? 1 较大),取该方向上的
增量为一个象素单位(△x=1),然后利用(1)式计算另一个方向的增量(△y=△x·m=m)。
第 1 页 共 9 页
(x , y )
通过递推公式(2),把每次计算出的 i?1 i ? 1 经取整后送到显示器输出,则得到扫
描转换后的直线。
之所以取 x2? x 1 和 y2? y 1 中较大者作为步进方向,是考虑沿着线段分布的象素
应均匀,这在下图中可看出。
另外,算法实现中还应注意直线???生成方向,以决定Δx 及Δy 是取正值还是负
值。
3. 直线 DDA 算法实现
1、已知直线的两端点坐标:(x1,y1),(x2,y2);
2、已知画线的颜色:color;
3、计算两个方向的变化量:dx=x2-x1
dy=y2-y1
4、求出两个方向最大变化量的绝对值:steps=max(|dx|,|dy|);
5、计算两个方向的增量(考虑了生成方向):xin=dx/steps
yin=dy/steps;
6、设置初始象素坐标:x=x1,y=y1;
7、用循环实现直线的绘制:for(i=1;i<=steps;i++) ;
{ putpixel(x,y,color);/*在(x,y)处,以 color 色画点*/
第 2 页 共