ウィキペディアの Bresenham のライン アルゴリズムに関する記事に基づいて、そこで説明されている簡略化されたバージョンを実装しました。私の Java 実装は次のようになります。
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;
}
}
err
これで、y 軸のステップと比較した x 軸のステップの比率を制御することが理解できました。 if ステートメントが正確になぜ、どのようerr
に、コードに見られるように変更されたのか。
ウィキペディアはこれ以上詳細な説明や情報源を示していないので、私は疑問に思っています:
Bresenham のライン アルゴリズムの単純化されたバージョンを使用して、水平ステップと垂直ステップの間の正しい比率を維持するために、正確に何err
をし、なぜ正確に示されている方法dx
で使用されているのでしょうか?dy