float radious = 250;
ArrayList<Crater> craters;
void setup(){
size(500, 500);
frameRate(180);
background(0);
stroke(255, 32);
strokeWeight(1);
craters = new ArrayList<Crater>();
for(int i = 0; i < 25; i++){
float posAng = random(TWO_PI);
float posR = random(radious);
float craR = map(sq(random(1)), 0, 1, 3, 5);
Crater crater = new Crater(new PVector(posR * cos(posAng), posR * sin(posAng)), craR);
craters.add(crater);
}
}
void draw(){
translate(width / 2, height / 2);
float end1Ang = random(TWO_PI);
PVector end1 = new PVector(radious * cos(end1Ang), radious * sin(end1Ang));
float end2Ang = random(TWO_PI);
PVector end2 = new PVector(radious * cos(end2Ang), radious * sin(end2Ang));
float slope = (end2.y - end1.y) / (end2.x - end1.x);
float a = slope;
float b = -1;
float c = end1.y - slope * end1.x;
for(Crater crater: craters){
float distance = abs(a * crater.position.x + b * crater.position.y + c) / sqrt(sq(a) + sq(b));
if(distance < crater.radious){
return;
}
}
line(end1.x, end1.y, end2.x, end2.y);
}
class Crater {
PVector position;
float radious;
Crater(PVector position, float radious){
this.position = position;
this.radious = radious;
}
}