public void draw(CGCanvas cgc) {
  int x, y, error, delta, schritt, dx, dy, inc_x, inc_y;
    
  x = x1;                                      // Koordinaten retten
  y = y1;                        

  dy = y2 - y1;                                // Hoehenzuwachs
  dx = x2 - x1;                                // Schrittweite

  if(dx > 0)                                   // Linie nach rechts?
    inc_x = 1;                                 // x inkrementieren
  else                                         // Linie nach links
    inc_x = -1;                                // x dekrementieren

  if(dy > 0)                                   // Linie nach unten?
    inc_y = 1;                                 // y inkrementieren
  else                                         // Linie nach oben
    inc_y = -1;                                // y dekrementieren

  if(Math.abs(dy) < Math.abs(dx)) {            // flach nach oben oder unten
    error = -Math.abs(dx);                     // Fehler bestimmen
    delta = 2*Math.abs(dy);                    // Delta bestimmen
    schritt = 2*error;                         // Schwelle bestimmen
    while(x != x2) {                           // Fuer jede x-Koordinate
      cgc.setPixel(x,y);                       // setze Pixel
      x += inc_x;                              // naechste x-Koordinate
      error = error + delta;                   // Fehler aktualisieren
      if (error > 0) {                         // neue Spalte erreicht?
        y += inc_y;                            // y-Koord. aktualisieren
        error += schritt;                      // Fehler aktualisieren
      }
    }
  }
  else {                                       // steil nach oben oder unten
    error = -Math.abs(dy);                     // Fehler bestimmen
    delta = 2*Math.abs(dx);                    // Delta bestimmen
    schritt = 2*error;                         // Schwelle bestimmen
    while(y != y2) {                           // fuer jede y-Koordinate
      cgc.setPixel(x,y);                       // setze Pixel
      y += inc_y;                              // naechste y-Koordinate
      error = error + delta;                   // Fehler aktualisieren
      if (error > 0) {                         // neue Zeile erreicht?
        x += inc_x;                            // x-Koord. aktualisieren
        error += schritt;                      // Fehler aktualisieren
      }
    }
  }
  cgc.setPixel(x2, y2);                        // letztes Pixel hier setzen, 
}                                              // falls (x1==x2) & (y1==y2)