arc walkers 2
@author
ArrayList<Drawer> drawers;
void setup(){
size(500, 500);
background(255);
colorMode(HSB, 360, 100, 100);
drawers = new ArrayList<Drawer>();
for(int i = 0; i < 100; i++){
drawers.add(new Drawer());
}
noStroke();
}
void draw(){
for(Drawer d: drawers){
d.update();
}
}
class Drawer{
PVector pos;
float radious, radian;
float radianSpeed;
color c;
Drawer(){
pos = new PVector(random(width), random(height));
radious = random(30, 100);
radian = random(TWO_PI);
radianSpeed = random(PI / 128, PI / 64);
c = color(random(360), 100, 100);
}
void update(){
fill(c);
if(radianSpeed > 0){
arc(pos.x, pos.y, radious * 2, radious * 2, radian, radian + radianSpeed);
arc(pos.x - width, pos.y, radious * 2, radious * 2, radian, radian + radianSpeed);
arc(pos.x + width, pos.y, radious * 2, radious * 2, radian, radian + radianSpeed);
arc(pos.x, pos.y - height, radious * 2, radious * 2, radian, radian + radianSpeed);
arc(pos.x, pos.y + height, radious * 2, radious * 2, radian, radian + radianSpeed);
} else {
arc(pos.x, pos.y, radious * 2, radious * 2, radian + radianSpeed, radian);
arc(pos.x - width, pos.y, radious * 2, radious * 2, radian + radianSpeed, radian);
arc(pos.x + width, pos.y, radious * 2, radious * 2, radian + radianSpeed, radian);
arc(pos.x, pos.y - height, radious * 2, radious * 2, radian + radianSpeed, radian);
arc(pos.x, pos.y + height, radious * 2, radious * 2, radian + radianSpeed, radian);
}
if(random(1) < 0.1){
pos.x += radious * cos(radian);
pos.y += radious * sin(radian);
if(pos.x < 0){
pos.x += width;
}
if(pos.x >= width){
pos.x -= width;
}
if(pos.y < 0){
pos.y += height;
}
if(pos.y >= height){
pos.y -= height;
}
radianSpeed *= -1;
radian += PI;
} else {
radian += radianSpeed;
}
if(radian < 0){
radian += TWO_PI;
}
if(radian >= TWO_PI){
radian -= TWO_PI;
}
}
}