# Processing.js

## SoftBody

by Ira Greenberg. Softbody dynamics simulation using curveVertex() and curveTightness()

Original Processing.org Example: SoftBody

```// All Examples Written by Casey Reas and Ben Fry
// unless otherwise stated.
// center point
float centerX = 0, centerY = 0;

float radius = 45, rotAngle = -90;
float accelX, accelY;
float springing = .0085, damping = .98;

//corner nodes
int nodes = 5;
float nodeStartX[] = new float[nodes];
float nodeStartY[] = new float[nodes];
float[]nodeX = new float[nodes];
float[]nodeY = new float[nodes];
float[]angle = new float[nodes];
float[]frequency = new float[nodes];

// soft-body dynamics
float organicConstant = 1;

void setup() {
size(200, 200);
//center shape in window
centerX = width/2;
centerY = height/2;
// iniitalize frequencies for corner nodes
for (int i=0; i<nodes; i++){
frequency[i] = random(5, 12);
}
noStroke();
smooth();
frameRate(30);
}

void draw() {
fill(0, 100);
rect(0,0,width, height);
drawShape();
moveShape();
}

void drawShape() {
//  calculate node  starting locations
for (int i=0; i<nodes; i++){
rotAngle += 360.0/nodes;
}

// draw polygon
curveTightness(organicConstant);
fill(255);
beginShape();
for (int i=0; i<nodes; i++){
curveVertex(nodeX[i], nodeY[i]);
}
for (int i=0; i<nodes-1; i++){
curveVertex(nodeX[i], nodeY[i]);
}
endShape(CLOSE);
}

void moveShape() {
//move center point
float deltaX = mouseX-centerX;
float deltaY = mouseY-centerY;

// create springing effect
deltaX *= springing;
deltaY *= springing;
accelX += deltaX;
accelY += deltaY;

// move predator's center
centerX += accelX;
centerY += accelY;

// slow down springing
accelX *= damping;
accelY *= damping;

// change curve tightness
organicConstant = 1-((abs(accelX)+abs(accelY))*.1);

//move nodes
for (int i=0; i<nodes; i++){