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)