

// 声明并初始化一个ArrayList来保存多个Fly实例
ArrayList<Fly> flies = new ArrayList<Fly>();
void setup() {
size(600, 600);
stroke(120);
strokeWeight(5);
// 添加多个Fly实例到ArrayList中,每个实例使用不同的种子
for (int i = 0; i < 20; i++) { // 创建i个实例
flies.add(new Fly(int(random(500))));
}
}
void draw() {
background(60, 60, 90);
// 使用for循环遍历ArrayList并更新每个Fly实例
for (Fly fly : flies) {
fly.update();
}
}
//定义类
class Fly {
float x, y, r1, r2, r3, angle, angle1, scale, scale1, lineLength, interval;
Fly(int seed) {
randomSeed(seed);
r1 = r2 = random(300); // 初始运动半径
scale = 0;
r3 = 0.1; // 初始旋转速度,越大越快
angle = 0;
interval = random(900, 2000); // 伸缩速度,越小越快
}
void update() {
if (scale >= 1) {
r1 = r2;
r2 = random(300); // 更新运动半径
scale = 0;
r3 = random(0.01, 0.05); // 更新旋转速度
}
scale += frameRate / interval;
scale1 = scale;
angle += r3;
angle1 = angle;
for (int i=0; i<20; i++) {
scale1 += frameRate / interval/10;
angle1 += r3/10;
lineLength = lerp(r1, r2, scale1);
x = lineLength * sin(angle1) + width / 2;
y = lineLength * cos(angle1) + height / 2;
point(x, y);
}
}
}