计算机图形学—DDA直线生成算法

王朝other·作者佚名  2006-01-10
宽屏版  字体: |||超大  

光栅扫描转换:

根据图形的几何描述,确定二维像素矩阵上,哪些像素是正好在图形上或最靠近图形。使所选择的像素尽量靠近理想图形。

直线光栅化:

已知一条直线的两个端点坐标,确定二维像素距阵上位于或最靠近这条直线,即是理论直线的所有像素的坐标值

在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从(x1, y1)到(x2, y2)的直线,实质上是一个发现最佳逼近直线的象素序列,并填入色彩数据的过程。这个过程也称为直线光栅化

一、直线的DDA算法

DDA是数字微分分析式(Digital Differential Analyzer)的缩写。

已知直线两端点(x1,y1)、(x2,y2)

则斜率m为:

m = (y2-y1)/(x2-x1)= Dx/Dy;

直线中的每一点坐标都可以由前一点坐标变化一个增量(Dx, Dy)而得到,即表示为递归式:

xi+1=xi+Dx

yi+1=yi+Dy

递归式的初值为直线的起点(x1, y1),这样,就可以用加法来生成一条直线。具体算法是:

该算法适合所有象限,其中用了用了两个函数如:

Integer(-8.5)= -9;

Integer(8.5) =8;

Sign(i),根据i的正负,分别得到-1,0,+1;

//DDA DrawLine

{

if(abs(x2-x1) > abs(y2-y1))

length = abs(x2-x1);

else

length = abs(y2-y1);

Dx = (x2-x1)/length;

Dy = (y2-y1)/length;

x = x1+0.5*Sign(Dx);

y = x2 + 0.5*Sign(Dy);

i = 1;

while(i <= lenght)

{

setpixel(Integer(x),Integer(y),color);

x= x + Dx;

y= y + Dy;

i+=1;

}

}

二、BresenHam算法

待续。。。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有