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

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

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

       在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从(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算法
   待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值