110



Spring2D s1,s2;
float gravity = 5.0;
float mass = 2.0;

void setup(){
size(100,100);
smooth();
fill(0);
s1 = new Spring2D(0.0,width/2,mass,gravity);
s2 = new Spring2D(0.0,width/2,mass,gravity);
}

void draw(){
background(204);
s1.update(mouseX,mouseY);
s1.display(mouseX,mouseY);
s2.update(s1.x,s1.y);
s2.display(s1.x,s1.y);
}

class Spring2D{
float vx, vy;
float x,y;
float gravity;
float mass;
float radius = 10;
float stiffness = 0.2;
float damping = 0.7;
Spring2D(float xpos, float ypos, float m, float g){
x = xpos;
y = ypos;
mass = m;
gravity = g;
}

void update(float targetX, float targetY){
float forceX =(targetX-x)*stiffness;
float ax = forceX /mass;
vx = damping*(vx+ax);
x += vx;
float forceY = (targetY-y)*stiffness;
forceY += gravity;
float ay = forceY/mass;
vy = damping*(vy+ay);
y += vy;
}

void display(float nx, float ny){
noStroke();
ellipse(x,y,radius*2,radius*2);
stroke(255);
line(x,y,nx,ny);
}
}

コメント