2017-01-16 12 views
-1

私は、描画する矩形の数と矩形を描画する座標を入力するプログラムを作った。私の長方形は、現在、次のように描かれています。与えられた座標の中心から矩形を描く

link http://image.prntscr.com/image/0e4d267fae7240138e8f0018dbcbb044.png

と私はこれを達成したい:

link http://image.prntscr.com/image/dfd134efe9b34dd7ac0a2795531cf763.png

これは私が四角形を描画するために使用するコードです:

int povecaj_kvadrat=0; 

    for(int x=0;x<broj_kvadrata;x++) { 
     Rectangle2D.Float kvadrat=new Rectangle2D.Float(brojevi_koordinate[0],brojevi_koordinate[1],50+povecaj_kvadrat,50+povecaj_kvadrat); 
     ploca.draw((kvadrat)); 
     povecaj_kvadrat=povecaj_kvadrat+15; 
    } 

     } 

矩形の座標を2番目のイメージのように描画するにはどうすればよいですか?

+0

「Rectangle2D.Float」の構築方法を見てください。最初の2つのパラメータは長方形の中心ではなく、左上の点です。そしてループの中で、あなたはこの点が固定されており、変化しない –

答えて

0

Rectangleの追加サイズと、各四角形の正しい座標を計算するループ内の位置を考慮する必要があります。

追加のサイズが変数として移動されました(diffSize)ので、ループでその値を使用できます。

2つの反復間の座標の差は、インクリメント(x)が小さく、サイズがRectangleで小さいほど、このdiffサイズの半分にループ内の位置の逆数を掛けたものになります。 ((diffSize/2)が最も近いint値に切り捨てられますので)diffSizeが奇数の場合、私は、正しい行動が不明だ

 int gap = 0; 
     int maxNumber = 3; 
     int diffSize = 20; 

     int[] coordinates = { 10, 10 }; 

     for (int x = 0; x <= maxNumber; x++) { 
      Rectangle2D.Float rectangle = new Rectangle2D.Float(
        coordinates[0] + ((diffSize/2) * (maxNumber - x)), 
        coordinates[1] + ((diffSize/2) * (maxNumber - x)), 
        50 + gap, 50 + gap); 
      g2d.draw((rectangle)); 
      gap = gap + diffSize; 
     } 

注ので、私はdiffSizeのためにも値を保持します。

関連する問題