|
|
| Ligne 1 : |
Ligne 1 : |
| − | <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>
| |