思路:设置正方形的中心点与边长,确定一个大的正方形,然后在大正方形内部绘制九个小正方形,并中间的小正方形涂成黑色,然后根据每个小正方形的中心点位置与边长,再在其内部绘制九个小正方形,如此递归绘制
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); } } } }
未经允许不得转载:前端撸码笔记 » processing绘制谢尔宾斯基地毯