您的位置:首页 > 理论基础

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

2005-09-20 21:56 531 查看
光栅扫描转换:
根据图形的几何描述,确定二维像素矩阵上,哪些像素是正好在图形上或最靠近图形。使所选择的像素尽量靠近理想图形。
直线光栅化:
已知一条直线的两个端点坐标,确定二维像素距阵上位于或最靠近这条直线,即是理论直线的所有像素的坐标值
在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从(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算法
待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: