2017-01-18 11 views
0

私は、n世代の線パターンを描画するプログラムを持っています。第0世代では、水平線が1つで始まり、それぞれの開いた端が別の垂線の中間点として機能します。写真は、n = 0、n = 1、n = 2でそれぞれ実行した結果を示しています。 http://i.imgur.com/jM11wKG.jpg各再帰呼び出しのJavaカウント終了

ここで、xは画面の中央に初期化され、stepsはステップ数です。

paintComponent(g,x, Direction.HORIZONTAL, steps); 

このメソッドは、期待される出力を生成し、正しく線を描画します。

public void paintComponent(Graphics g,Point point,Direction direction, int n){ 

    if(n>=0){ 
     //length*=multiplier; 
     double mid = length/2; 
     Point e1; 
     Point e2; 
     if(direction==Direction.HORIZONTAL){ 
      e1 = new Point((int)(point.getX()-mid),(int)(point.getY())); 
      e2 = new Point((int)(point.getX()+mid),(int)(point.getY())); 
      g.drawLine((int)e1.getX(),(int)e1.getY(),(int)e2.getX(),(int)e2.getY()); 
      direction = Direction.VERTICAL; 
     } 
     else{ 
      e1 = new Point((int)(point.getX()),(int)(point.getY()-mid)); 
      e2 = new Point((int)(point.getX()),(int)(point.getY()+mid)); 
      g.drawLine((int)e1.getX(),(int)e1.getY(),(int)e2.getX(),(int)e2.getY()); 
      direction = Direction.HORIZONTAL; 
     } 
     n--; 
     paintComponent(g,e1, direction, n); 
     paintComponent(g,e2, direction, n); 
    } 
} 

私は各世代/ステップの後に乗数でラインの長さを変更しようとしています。最初の行は最初の長さとなり、長さはn = 1で追加された2行の長さ* =乗数に更新され、n = 2などで追加された4に対して再び更新されます。

私は何を持っていますか問題の定義は各ステップが実際に終了するところであり、そこで長さを更新することができます。私は、各ステップがループに複数回入るので、私がここでそれを更新することはできません。私はカウント変数を反復しようとしましたが、私はそれを置く場所を見つけることができません。

答えて

1

ラインの長さを変更したい場合は、ラインが水平のときにe1.xとe2を増減するようにポイントe1とe2を変更する必要があります。 xを増加または減少させたい値に応じて変更し、垂直方向に変更する場合は、g.drawlineメソッドを呼び出す前にe1.yおよびe2.yのみを変更します。 ポイントの位置を変更するには、ポイントクラスのtranslateメソッドを使用して、実際のポイントを操作するファクタに従ってdxとdyの値を計算する必要があります。

希望しています。

関連する問題