Advertisement

光栅图形学-画直线经典算法

阅读量:

光栅图形学算法-画直线算法

如果对这些算法感兴趣,可以去查阅算法的详细介绍,这里只是用伪代码来描述这些算法。

1.DDA算法
DDA算法依赖于直线的斜截式方程

复制代码
     n=x2 - x1; //像素点个数
     k = (y2-y1)/(x2-x1);  //直线斜率 
     for(int i=1;i<=n;i++)
     {
      x1 = x1 + 1;
      y1 = y1 + k;
      y = int(y + 0.5) //y的值才是点的纵坐标
     }

2.中点画线算法
中点画线算法依赖直线的一般式方程

复制代码
    n= x2 - x1;
     //直线的各个参数
     A = y1 - y2;
     B = x2 - x1;
     C = x1 * y2 - x2 * y1;
     
     d = 2 * (A * (x1+1) + B * (y1+0.5) + C);
     for(int i=1; i<=n; i++)
     {  
      x1 += 1;
      if(d<0)
      {  
       y1 += 1;
       d += (A + B) * 2;
      }
      else
       d += 2 * A;
     }

3.Bresenham算法
Bresenham算法集合了以上两个算法的优点。

复制代码
     n=x2 - x1;
     dx = x2 - x1;
     dy = y2 - y1;
     e = -1 * dx;
     for(int i=1; i<=n; i++)
     {
      x1 += 1;
      e += 2 * dy;
      if(e > 0)
      {
       y1 += 1;
       e -= 2 * dx;
      }
     }

全部评论 (0)

还没有任何评论哟~