float MAX_RADIOUS = 20;
float MIN_RADIOUS = 5;
ArrayList<Circle> circles;
void setup(){
size(500, 500);
smooth();
background(255);
circles = new ArrayList<Circle>();
}
void draw(){
Circle circle = new Circle();
if(!isOverlapping(circle)){
circle.draw();
circles.add(circle);
}
}
boolean isOverlapping(Circle newCircle){
if(isOverlappingWithSide(newCircle)){
return true;
}
for(Circle circle: circles){
if(newCircle.isOverlapping(circle)){
return true;
}
}
return false;
}
boolean isOverlappingWithSide(Circle newCircle){
if(newCircle.x - newCircle.radious < 0 || newCircle.x + newCircle.radious > width ||
newCircle.y - newCircle.radious < 0 || newCircle.y + newCircle.radious > height){
return true;
} else {
return false;
}
}
class Circle{
float x;
float y;
float radious;
Circle(){
x = random(width);
y = random(height);
radious = random(MAX_RADIOUS - MIN_RADIOUS) + MIN_RADIOUS;
}
void draw(){
noStroke();
fill(0);
arc(x, y, radious * 2, radious * 2, 0, PI * 2);
}
boolean isOverlapping(Circle circle){
float distance = sqrt(sq(x - circle.x) + sq(y - circle.y));
if(distance < radious + circle.radious){
return true;
} else {
return false;
}
}
}