home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_06_06 / v6n6090a.txt < prev    next >
Text File  |  1989-09-28  |  1KB  |  100 lines

  1.  \NLETTER\6.6\CURVES56.PRGProgram 6
  2.  
  3. void line (x1,y1,x2,y2, ci)
  4. int x1, x2, y1, y2, ci;
  5. {
  6.     int dx, dy, inc1, inc2, inc3, d, x, y, xend, yend;
  7.     dx = abs(x2-x1);
  8.     dy = abs(y2-y1);
  9.     if (dy<=dx)
  10.         {
  11.             if (x1>x2)
  12.             {
  13.                 x = x2;
  14.                 y = y2;
  15.                 xend = x1;
  16.                 dy = y1 - y2;
  17.             }
  18.             else
  19.             {
  20.                 x = x1;
  21.                 y = y1;
  22.                 xend = x2;
  23.                 dy = y2 - y1;
  24.             }
  25.             d = 2*dy-dx;
  26.             inc1 = 2*dy;
  27.             inc2 = 2*(dy-dx);
  28.             inc3 = 2*(dy+dx);
  29.             writepixel (x,y,ci);
  30.             while (x<xend)
  31.             {
  32.                 x++;
  33.                 if (d>=0)
  34.                 {
  35.                     if (dy<=0) d+= inc1;
  36.                     else
  37.                     {
  38.                         y++;
  39.                         d += inc2;
  40.                     }
  41.                 }
  42.                 else
  43.                 {
  44.                     if (dy>=0) d+= inc1;
  45.                     else
  46.                     {
  47.                         y --;
  48.                         d += inc3;
  49.                     }
  50.                 }
  51.                 writepixel (x,y,ci);
  52.             }
  53.         }
  54.  
  55.     else
  56.     {
  57.         if (y1>y2)
  58.         {
  59.             y = y2;
  60.             x = x2;
  61.             yend = y1
  62.             dx = x1 - x2;
  63.         }
  64.         else
  65.         {
  66.             y = y1;
  67.             x = x1;
  68.             tebd = y2;
  69.         }
  70.         d = 2*dx-dy;
  71.         inc1 = 2*dx;
  72.         inc2 = 2*(dx - dy);
  73.         inc3 = 2*(dx + dy);
  74.         writepixel (x,y,ci);
  75.         while (y<yend)
  76.         {
  77.             y++;
  78.             if (d>=0)
  79.             {
  80.                 if (dx <= 0) d+= inc1;
  81.                 else
  82.                 {
  83.                     x++;
  84.                     d += inc2;
  85.                 }
  86.             }
  87.             else
  88.             {
  89.                 if (dx >= 0) d + = inc1;
  90.                 else
  91.                 {
  92.                     x --;
  93.                     d += inc3;
  94.                 }
  95.             }
  96.             writepixel (x,y,,ci);
  97.             }
  98.         }
  99.     }
  100.