Vereinfachte Bresenham-line-Algorithmus: Was hat es *genau*?

Basierend auf Wikipedia-Artikel auf Bresenham ' s line algorithm, ich habe implementiert die vereinfachte version dort beschrieben, meine Java-Implementierung sieht wie folgt aus:

int dx = Math.abs(x2 - x1);
int dy = Math.abs(y2 - y1);

int sx = (x1 < x2) ? 1 : -1;
int sy = (y1 < y2) ? 1 : -1;

int err = dx - dy;

while (true) {
    framebuffer.setPixel(x1, y1, Vec3.one);

    if (x1 == x2 && y1 == y2) {
        break;
    }

    int e2 = 2 * err;

    if (e2 > -dy) {
        err = err - dy;
        x1 = x1 + sx;
    }

    if (e2 < dx) {
        err = err + dx;
        y1 = y1 + sy;
    }
}

Nun verstehe ich, dass err steuert das Verhältnis zwischen den Schritten auf der x-Achse im Vergleich zu den Schritten auf der y-Achse, aber nun soll ich, um zu dokumentieren, was der code tut, ich kann nicht klar Ausdrücken, was es ist, und warum genau die wenn-Anweisungen sind, wie Sie sind, und warum err verändert die Art und Weise wie in dem code.

Wikipedia nicht auf genauere Erläuterungen oder Quellen, so Frage ich mich:

Was genau macht err tun und warum sind dx und dy verwendet in genau der dargestellten Art und Weise zu pflegen, das richtige Verhältnis zwischen horizontalen und vertikalen Schritte, die mit diesem vereinfachten version von Bresenham ' s line algorithm?

InformationsquelleAutor der Frage riwi | 2011-11-13

Schreibe einen Kommentar