.
2.1.1 生成直线的 DDA算法
数值微分法即 DDA法 (Digital Differential Analyzer) ,是一种基于直线的微分方程来生
成直线的方法。
一、直线 DDA算法描述:
设 (x 1 ,y 1) 和 (x 2 ,y2 ) 分别为所求直线的起点和终点坐标,由直线的微分方程得
= m = 直线的斜率 (2 - 1)
△
可通过计算由 x 方向的增量 x 引起 y 的改变来生成直线:
△
x i+1 =x i + x (2 -2)
i+1 i △ i △ ·
y =y + y=y + x m (2 -3)
也可通过计算由 y 方向的增量 △y 引起 x 的改变来生成直线:
△
y i+1 =y i + y (2 -4)
i+1 i △ i △
x =x + x=x + y/m (2 -5)
式 (2 -2) 至(2 -5) 是递推的。
二、直线 DDA算法思想:
选定 x2 -x 1 和 y 2 -y 1 中较大者作为步进方向 ( 假设 x 2 -x 1 较大 ) ,取该方向上的增量为一个象
△ △ △ ·
素单位 ( x=1) ,然后利用式 (2 - 1) 计算另一个方向的增量 ( y= x m=m)。通过递推公式 (2 -2) 至
(2 - 5) ,把每次计算出的 (x i+1 ,yi+1 ) 经取整后送到显示器输出,则得到扫描转换后的直线。
之所以取 x 2 -x 1 和 y 2 -y 1 中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在
下图中可看出。
Δ Δ
另外,算法实现中还应注意直线的生成方向,以决定 x 及 y 是取正值还是负值。
三、直线 DDA算法实现:
1、已知直线的两端点坐标: (x1 ,y1) , (x2 ,y2)
2 、已知画线的颜色: color
3 、计算两个方向的变化量: dx=x2 -x1
dy=y2 -y1
4 、求出两个方向最大变化量的绝对值:
steps=max(|dx| ,|dy|)
5 、计算两个方向的增量 ( 考虑了生成方向 ) :
xin=dx/steps
Word 资料
.
yin=dy/steps
6 、设置初始象素坐标: x=x1,y=y1
7