在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从(x1, y1)到(x2, y2)的直线,实质上是一个发现最佳逼近直线的象素序列,并填入色彩数据的过程。这个过程也称为直线光栅化。
直线的DDA算法
DDA是数字微分分析式(Digital Differential Analyzer)的缩写。设直线之起点为(x1,y1),终点为(x2,y2),则斜率m为:
m = (y2-y1)/(x2-x1)=dy/dx
直线中的每一点坐标都可以由前一点坐标变化一个增量(Dx, Dy)而得到,即表示为递归式:
xi+1=xi+Dx
yi+1=yi+Dy
并有关系:Dy = m · Dx
递归式的初值为直线的起点(x1, y1),这样,就可以用加法来生成一条直线。具体方法是:
图 2.1.1 直线方向的8个象限
表 2.1.1
象限 |
|dx|>|dy|? |
D x |
D y |
1a 1b 2a 2b 3a 3b 4a 4b |
Ö ´ Ö ´ Ö ´ Ö ´ |
1 1/m -1 -1/m -1 -1/m 1 1/m |
m 1 m 1 -m -1 -m -1 |
按照直线从(x1,y1)到(x2,y2)的方向不同,分为8个象限(图 2.1.1 )。对于方向在第1a象限内的直线而言,D x=1,D y=m。对于方向在第1b象限内的直线而言,取值Dy=1,<