int SPRING_NUM = 30;
float SPRING_COEFFICNET = 0.01;
PVector center;
ArrayList<Spring> springs;
void setup(){
size(500, 500);
smooth();
frameRate(24);
center = new PVector(width/2, height/2);
springs = new ArrayList<Spring>();
for(int i = 0; i < SPRING_NUM; i++){
springs.add(new Spring());
}
}
void draw(){
background(255);
for(Spring s: springs){
s.display();
s.update();
}
}
class Spring{
PVector position;
PVector velocity;
float normalLength;
float springLength;
Spring(){
normalLength = 150;
springLength = normalLength + random(100);
float radian = random(TWO_PI);
position = new PVector(center.x + cos(radian) * springLength, center.y + sin(radian) * springLength);
velocity = new PVector(0, 0);
}
void display(){
stroke(0);
strokeWeight(3);
line(center.x, center.y, position.x, position.y);
stroke(40);
strokeWeight(3);
fill(160);
ellipse(position.x, position.y, 50, 50);
}
void update(){
float extention = springLength - normalLength;
PVector direction = PVector.sub(position, center);
direction.normalize();
PVector acceleration = PVector.mult(direction, -1.0 * SPRING_COEFFICNET * extention);
velocity.add(acceleration);
position.add(velocity);
springLength = PVector.dist(center, position);
}
}