2017-01-16 85 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; 
    } 

     } 

如何設置矩形的座標,使其像第二個圖像一樣繪製?

+0

看看如何構建'Rectangle2D.Float'。前兩個參數不是矩形中心,而是左上角的點。而在循環中,你有這個點是固定的,不會改變 –

回答

0

您將不得不考慮每個Rectangle的附加尺寸以及其在迴路中的位置,以計算每個矩形的正確座標。

附加大小已作爲變量移動(diffSize),以便您的循環可以使用其值。

兩次迭代之間的座標差將是差分大小的一半,乘以循環中位置的倒數,因爲增量(x)越小,座標越大。

 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爲奇數(因爲(diffSize/2)將向下調整至最接近的int值),所以我會保持一個更值diffSize