2017-10-24 3 views
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); 
     } 

     } 

     } 






    } 


}          

どうすれば修正できますか?

答えて

1

問題は、あなたの中括弧{}がちょっと混じっているというあなたのステートメントの終了にあります。具体的には、あなたのコードは、関連するビットに削減:あなたはあなたの中括弧を修正した場合、それはより良い動作するはずのよう

if (dx > dy) 
    { 
     ... 
     if (dy > dx) 
     { 
      ... 
     } 
    } 

は、それが見えます。

if (dx > dy) 
    { 
     ... 
    } 
    if (dy > dx) 
    { 
     ... 
    } 

でも、dx == dyでも問題はあります。

関連する問題