2016-10-18 10 views
0

文法のエラーはありませんが、数学的/論理的な面では何かがあります。だから私は円から線を引いて、始点と終点だけを与えようとしています。私の問題は、ラインの傾きを得ることにあります。ここでスロープを取得し、ラインを描くための私のコードは次のとおりです。円の外に線を描く

public void setVectorX(){ 
     xVector = difX/difY; 
    } 
    public void setVectorY(){ 
     yVector = difY/difX; 
    } 

    public void makeLine(){ 
     setVectorX(); 
     setVectorY(); 

     double prevX; 
     double prevY; 

     for(int i = 0; i < d; i++){ 

      if(i == 0){ 
       prevX = startX; 
       prevY = startY; 
      } else { 
       Circle prev = line.get(i-1); 
       prevX = prev.getX(); 
       prevY = prev.getY(); 
      } 

      Circle circ = new Circle(prevX+xVector,prevY+yVector,thickness,color); 
      line.add(circ); 
     } 
    } 

これで問題がされ、エンドポイントは、かつて同じ軸の上であることになる近い、のそれぞれの間で大きなスペースがありますサークルは実際に描画されなくなります。誰もがこれを行うためのより効果的な方法を知っているので、ラインは時間の100%をどのように塗るか?

ありがとうございます!

相続人は何それは次のようになります。

enter image description here

する相続人は、それが最後に軸の一つとしてどのように見えるか、スタートと同じ軸に近づく:

enter image description here

要求されたとおりにd、difX、およびdifYを宣言するコードは次のとおりです。

public Line(int nStartX, int nStartY, int nEndX, int nEndY, int nThickness,Color nColor){ 
     startX = nStartX; 
     startY = nStartY; 

     endX = nEndX; 
     endY = nEndY; 

     thickness = nThickness; 

     d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startX-endX), 2)); 

     color = nColor; 

     difX = endX-startX; 
     difY = endY-startY; 

     makeLine(); 
    } 
+1

一部の画像が本当に役立つだろう追加するときに、この多分稀のものであろう。あなたが知っているように、写真を見せているように、「これは今見ている方法です」。 – GhostCat

+0

実際に解決策を見つけるにはあまりにも多くのコードがありません。 'xVector'' yVector'はintとして宣言されていませんか? – StephaneM

+0

これらはdouble –

答えて

0

difXとdifYの差が大きくなるほど、ドットの間隔が広がることに気付きました。このメソッドを追加して、ベクターを設定した後に呼び出すと、それを修正する必要があります。今

public void rescale(){ 
    double hyp = Math.sqrt(Math.pow(xVector,2) + Math.pow(yVector,2)); 
    xVector /= hyp; 
    yVector /= hyp; 
} 

変更:ここ がメソッドである

setVectorX(); 
setVectorY(); 

setVectorX(); 
setVectorY(); 
rescale(); 

に、あなたは

xVector = difX/difY; 

に変更する必要がありますyVector

に同じ

xVector = difX 

第二の問題は、あなたが誤って二回DIFXを使用しています。あなたがやった:

d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startX-endX), 2)); 

それがあるべきとき:

d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startY-endY), 2)); 
+0

に編集しました。テストに使用したコードはすべてここにあります:https://docs.google.com/document/d/1mKxaEBymIBRHCUJjeJZRTbtiBAuRyr2ifiCb-O8rY_o/edit?usp=sharing –

+0

ありがとうございました!これはほぼ完全に動作しますが、わずかな問題があります。私が同じ軸に近づくにつれて、短い線が得られます。私は終点のポイント1,150を入力し、ラインは非常に短いです。軸が重なると、線全体が消えます。私のループはd(距離)で走るかもしれないが、これは多分いくつかの問題を引き起こすものだろうか? –

+0

はdifXで、エンドポイントの座標は異なりますか? –