TestPjs

De fablabo
Aller à : navigation, rechercher

<processingjs> // 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(800, 600);
 //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() {

 //fade background
 fill(0, 100);
 rect(0,0,width, height);
 drawShape();
 moveShape();

}


void drawShape() {

 //  calculate node  starting locations
 for (int i=0; i<nodes; i++){
   nodeStartX[i] = centerX+cos(radians(rotAngle))*radius;
   nodeStartY[i] = centerY+sin(radians(rotAngle))*radius;
   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++){
   nodeX[i] = nodeStartX[i]+sin(radians(angle[i]))*(accelX*2);
   nodeY[i] = nodeStartY[i]+sin(radians(angle[i]))*(accelY*2);
   angle[i]+=frequency[i];
 }

}

</processingjs>