两点之画一条直线

**************************************************************
两点之画一条直线
Glib_Line(起点座标x,起点座标y,终点座标x,终点座标y,直线颜色)
**************************************************************/
static void Glib_Line(int x1,int y1,int x2,int y2, U16 color)
{
 int dx,dy,e;
 dx=x2-x1;
 dy=y2-y1;
    
 if(dx>=0)
 {
    if(dy >= 0) // dy>=0
    {
     if(dx>=dy) // 1/8 octant
     {
      e=dy-dx/2;
      while(x1<=x2)
      {
       PutPixel(x1,y1,color);
       if(e>0){y1+=1;e-=dx;}
       x1+=1;
       e+=dy;
      }
     }
     else   // 2/8 octant
     {
      e=dx-dy/2;
      while(y1<=y2)
      {
       PutPixel(x1,y1,color);
       if(e>0){x1+=1;e-=dy;}
       y1+=1;
       e+=dx;
      }
     }
    }
    else     // dy<0
    {
     dy=-dy;   // dy=abs(dy)

     if(dx>=dy) // 8/8 octant
     {
      e=dy-dx/2;
      while(x1<=x2)
      {
       PutPixel(x1,y1,color);
       if(e>0){y1-=1;e-=dx;}
       x1+=1;
       e+=dy;
      }
     }
     else   // 7/8 octant
     {
      e=dx-dy/2;
      while(y1>=y2)
      {
       PutPixel(x1,y1,color);
       if(e>0){x1+=1;e-=dy;}
       y1-=1;
       e+=dx;
      }
     }
    }
}
else //dx<0
{
   dx=-dx;   //dx=abs(dx)
   if(dy >= 0) // dy>=0
   {
    if(dx>=dy) // 4/8 octant
    {
     e=dy-dx/2;
     while(x1>=x2)
     {
      PutPixel(x1,y1,color);
      if(e>0){y1+=1;e-=dx;}
      x1-=1;
      e+=dy;
     }
    }
    else   // 3/8 octant
    {
     e=dx-dy/2;
     while(y1<=y2)
     {
      PutPixel(x1,y1,color);
      if(e>0){x1-=1;e-=dy;}
      y1+=1;
      e+=dx;
     }
    }
   }
   else     // dy<0
   {
    dy=-dy;   // dy=abs(dy)

    if(dx>=dy) // 5/8 octant
    {
     e=dy-dx/2;
     while(x1>=x2)
     {
      PutPixel(x1,y1,color);
      if(e>0){y1-=1;e-=dx;}
      x1-=1;
      e+=dy;
     }
    }
    else   // 6/8 octant
    {
     e=dx-dy/2;
     while(y1>=y2)
     {
      PutPixel(x1,y1,color);
      if(e>0){x1-=1;e-=dy;}
      y1-=1;
      e+=dx;
     }
    }
   }
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值