Based on Wikipedia's article on Bresenham's line algorithm I've implemented the [simplified version](http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm#Simplification) described there, my Java implementation looks like this:

```
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;
    }
}

```

Now I do understand that `err` controls the ratio between steps on the x-axis compared to steps on the y-axis - but now that I'm supposed to document what the code is doing I fail to clearly express, what it is for, and why *exactly* the if-statements are, how they are, and why `err` is changed in the way as seen in the code.

Wikipedia doesn't point to any more detailled explanations or sources, so I'm wondering:

**What precisely does `err` do and why are `dx` and `dy` used in exactly the shown way to maintain the correct ratio between horizontal and vertical steps using this simplified version of Bresenham's line algorithm?**