0
私はユーザ入力x1、y1、x2、y2から線を引く小さなプログラムを書いた。なんらかの理由で、ラインは水平の間しか動作しませんが、一度ラインが垂直でなければなりません。私はすべてをチェックして、私はアルゴリズムが正しいと確信していますが、問題はまだここにあります。Bresenhamのラインアルゴリズムを作るには?
int x1 = Integer.parseInt(this.jTextFieldX1.getText());
int y1 = Integer.parseInt(this.jTextFieldY1.getText());
int x2 = Integer.parseInt(this.jTextFieldX2.getText());
int y2 = Integer.parseInt(this.jTextFieldY2.getText());
int xi = x2 > x1 ? 1:-1;
int yi = y2 > y1 ? 1:-1;
int dx = Math.abs(x2-x1);
int dy = Math.abs(y2-y1);
int xn= x1;
int yn= y1;
int pn;
canvas.showBlackPixel(xn,yn);
if (dx > dy)
{
pn= 2*dy - dx;
while (xn != x2)
{
if (pn >0)
{
xn=xn + xi;
yn=yn + yi;
pn=pn + 2*dy - 2*dx;
}
else
{
xn = xn + xi;
pn = pn+ 2*dy;
}
canvas.showBlackPixel(xn,yn);
}
{
if (dy > dx)
{
pn= 2*dx - dy;
while (yn != y2)
{
if (pn > 0)
{
xn=xn + xi;
yn=yn + yi;
pn=pn + 2*dx - 2*dy;
}
else
{
yn = yn + yi;
pn = pn + 2*dx;
}
canvas.showBlackPixel(xn,yn);
}
}
}
}
}
どうすれば修正できますか?