堆叠正方形/盒子

时间:2014-08-27 16:55:17

标签: java for-loop

我需要一些简单问题的帮助。我在任务结束时,我们要制作不同的艺术人物。我在一个广场上制作了一个正方形"框,需要生成该框的4行和4列。

enter image description here

我认为最好的解决方案是针对循环的更多解决方案,但不能使其正常工作。

我的代码:

class StandardPanel extends JPanel{     

    public void paintComponent(Graphics g){  

       Graphics2D g2d = (Graphics2D) g;

       double alpha = Math.toRadians(5);
       double factor = 1 / (Math.sin(alpha) + Math.cos(alpha));
       double size = 200;

       g2d.translate(size, size);

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

           int intSize = (int) Math.round(size);

           g2d.setColor(i % 2 == 0 ? Color.white : Color.white);
           g2d.fillRect(-intSize / 2, -intSize / 2, intSize, intSize);
           g2d.setColor(i % 2 == 0 ? Color.black : Color.black);
           g2d.drawRect(-intSize / 2, -intSize / 2, intSize, intSize);

           size = size * factor;
           g2d.rotate(alpha);
      }
   }
}

1 个答案:

答案 0 :(得分:1)

您需要将绘图代码放在双嵌套for循环中,以在网格中创建多个对象。此外,您需要重新翻译g2d对象,以便它实际上相对于网格中的位置更改位置:

for ( int row = 0; row < 4; row++ ) // 4 rows
{
  for ( int col = 0; col < 4; col++ ) // 4 columns
  {
    g2d.translate(row*size, col*size); // change the location of the object

     for (int i = 0; i < 28; i++)  // draw it
     {
       int intSize = (int) Math.round(size);

       g2d.setColor(i % 2 == 0 ? Color.white : Color.white);
       g2d.fillRect(-intSize / 2, -intSize / 2, intSize, intSize);
       g2d.setColor(i % 2 == 0 ? Color.black : Color.black);
       g2d.drawRect(-intSize / 2, -intSize / 2, intSize, intSize);

       size = size * factor;
       g2d.rotate(alpha);
    }
  }
}