思路:设置正方形的中心点与边长,确定一个大的正方形,然后在大正方形内部绘制九个小正方形,并中间的小正方形涂成黑色,然后根据每个小正方形的中心点位置与边长,再在其内部绘制九个小正方形,如此递归绘制
void setup() {
size(900, 900);
}
void draw() {
background(255);
drawCarpet(900/3, 0, 0);//此处900可以改成mouseX看看效果
}
void drawCarpet(float sideLength, float startX, float startY) {
noStroke();
for (int i=0; i<3; i++) {//横三行
for (int j=0; j<3; j++) {//竖三行
if (i==1&&j==1) {//只有中间的正方形填充黑色
fill(0);
} else {
noFill();
}
rectMode(CENTER);
rect(startX+sideLength/2+i*sideLength, startY+sideLength/2+j*sideLength, sideLength, sideLength);
if (sideLength>10) {//边长<10就不再绘制
drawCarpet(sideLength/3, startX+i*sideLength, startY+j*sideLength);
}
}
}
}
0 条评论。