processing绘制谢尔宾斯基地毯

思路:设置正方形的中心点与边长,确定一个大的正方形,然后在大正方形内部绘制九个小正方形,并中间的小正方形涂成黑色,然后根据每个小正方形的中心点位置与边长,再在其内部绘制九个小正方形,如此递归绘制

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绘制谢尔宾斯基地毯

上一篇:

下一篇: