我需要一些简单问题的帮助。我在任务结束时,我们要制作不同的艺术人物。我在一个广场上制作了一个正方形"框,需要生成该框的4行和4列。
我认为最好的解决方案是针对循环的更多解决方案,但不能使其正常工作。
我的代码:
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);
}
}
}
答案 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);
}
}
}