原创 单片机画直线程序(Bresenham Midline C51 Rountine)

2007-12-23 16:23 3373 10 10 分类: MCU/ 嵌入式

  原以为液晶很容易,谁知调了以后才发现又是一片新领域。草草补点儿计算机图形学,
又耗两天才把画直线的程序给做出来了(愚钝),有感于参考书上都只一般讲了0≤k≤1情
况(窃以为高高在上是国产教材的特点),所以下面这个程序对似我一样钝的人来说应该
有点儿批判价值,就献丑了。


/********************************
适用:单片机,240*128液晶
作者:aifmlf
时间:12/23/2007
*********************************/
void Bresenhamline(int x0,int y0,int x1,int y1)
{
 int x,y;
 int dx,dy,e;
 
 y0 = 127 - y0;
 y1 = 127 - y1;
 if(x0>x1)      //保证沿x方向增长
 {
  x = x1;x1 = x0;x0 = x;
  y = y1;y1 = y0;y0 = y;
 }
 x = x0;y = y0;
 dx = x1 - x0;
 dy = y1 - y0;
 if(dy>=0)
 {
     if(dx>dy)
     {
         e = -dx;
         while(x<=x1)
         {
          putpixel(x,127-y,1);
          x++;
          e += 2*dy;
          if(e>0)
          {
           y++;
           e = e - 2*dx;
          }
      
      }
     }
     else
     {
      e = -dy;
      while(y<=y1)
      {
       putpixel(x,127-y,1);
       y++;
       e += 2*dx;
       if(e>0)
       {
        x++;
        e  = e - 2*dy;
       }
      }
     }
 }
 else
 {
     if(dx>abs(dy))
     {
         e = -dx;
         while(x<=x1)
         {
          putpixel(x,127-y,1);
          x++;
          e += 2*dy;
          if(e>0)
          {
           y--;
           e = e - 2*dx;
          }
      
      }
     }
     else
     {
      e = -dy;
      while(y>=y1)
      {
       putpixel(x,127-y,1);
       y--;
       e += 2*dx;
       if(e>0)
       {
        x++;
        e  = e + 2*dy;
       }
      }
     }
 }
}


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条