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;
}
}
今私は、x軸上のステップ間err
コントロールの比率を比較することを理解してくださいy軸上のステップに移動しますが、コードが何をしているのかを文書化するようになったので、明確に表現していない、それが何であるのか、なぜか if文は、 err
はコードのように変更されています。
ウィキペディアはこれ以上detailled説明や情報源を指していないので、私は思ったんだけど:
何を正確にerr
はやるん、なぜdx
、正しい比率を維持するために正確に示すように使用dy
ありますBresenhamのラインアルゴリズムの簡略化されたバージョンを使用して、水平と垂直のステップの間に?
あなたの数式は単純化されました。 "if(e2> -dy){"ブロックの後ろにそれが最後にあるかどうかを確認する別のチェックが必要です。もしそうなら、プロットしてからループを解除してください。 x軸に沿って1つのポイントが欠落するケースがあります。 –