2017-01-16 64 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