float a,i,j,j1,r,r1,r2,r3,k,k1;
int x,angle = 20; // 旋转角度
void setup() {
size(600, 600);
x = width/2;
r3=30;//中间圆的半径
stroke(0);
strokeWeight(1);
noFill();
pushMatrix(); // 保存当前的变换矩阵
translate(x, x); // 移动到画布中心
for (float b=0; b<TWO_PI; b=b+TWO_PI/angle) {
a = 0;//如果注释掉这行,可以只生成一条曲线。
i=1.18;//控制曲线从曲到直的变化速率,越小越曲折。
j = 0;//曲线开始的摆动幅度。越小越大,可以是负数。
j1 = 0.8;//控制曲线的弯折次数,越大弯越少
r2 = 120;//曲线开始的摆动幅度。越大越大。
beginShape();
while (a < x*1.5) {//乘1.5是为了填满方形画布
r = r2/pow(i, j);
j=j+j1;
r1 = random(-r, r);//计算横向摆动
k1=16;//和i的效果一样,越大越直。
k = sq(j)/k1;//利用幂函数让越开始的摆动越密。
a = a + k;//计算纵向缩放
curveVertex(0+r1, a+r3);
}
endShape();
rotate(TWO_PI/angle); // 应用旋转
}
circle(0, 0, r3*2);
}
void draw(){}//没有draw就没法用keypressd
void keyPressed() {
if (key == 's' || key == 'S') {
saveFrame("###.png");//save没法用哈希标记#保存图片
}
}
======================================================
变量名取的不好,只能尽量写注释了。
注释掉a=0这行,可以只画一个曲线。