|
|
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>
| |