Table des matières

Plantasia

* Cop d'avance : axe 5, bien vivre en PACA

FIXME Qualité illustrations

FIXME source du programme (.zip), inutile de tout expliquer - commenter le programme directement

m( Orthographe!! Expression!

**Contexte**

Suite du projet Plantasia à travers un programme intéractif et des affiches animées. L'installation incarne un autel de prière, le but était de dévellopper une lithurgique autour du végétale. Entouré d'affiche et immergé à travers une bande son, le fidèle peut faire apparaitre grâce à un capteur de mouvement leap-motion (tutos : leap motion 1 & leap motion 2) particules vertes. Ce geste est une vénération faite aux plantes, il vise à se faire pardonner pour ces péchés et se reconnecter avec la nature.

**Contenu**

**Détails programme**

V1 (juste les particules)

Début description programme

plantasia.zip
 
// importation des librairies
import de.voidplus.leapmotion.*;
//création de "l'objet" leap 
LeapMotion leap;
 
ArrayList<PVector> points; 
PVector fp;
 
ArrayList<Particle> pts;
PFont a;

Paramètres du setup

void setup() {
fullScreen();
background(0);
frameRate(30);
noCursor();
 
  points = new ArrayList<PVector>();  //  ArrayList VIDE
  noStroke();
  pts = new ArrayList<Particle>();
}

Paramètres du draw

void draw() {
int fps = leap.getFrameRate();
frameRate(fps);
  
//  Mains
for (Hand hand : leap.getHands()) {
  // Doigts
  for (Finger finger : hand.getFingers()) {
  fp   = finger.getPosition(); 
  if (fp.z <= 30) {
  points = new ArrayList<PVector>();
  } else if (fp.z > 30) {
  points.add(new PVector(fp.x, fp.y));
  }
  }
  }
 
  {
  for (int i = points.size()-1; i >= 0; i--) {
  PVector p = points.get(i);
  Particle newP = new Particle(p.x, p.y, i+pts.size(), i+pts.size());
  pts.add(newP);
  }
  
  }
  for (int i=0; i<pts.size(); i++) {
  Particle p = pts.get(i);
  p.update();
  p.display();
  }

  for (int i=pts.size()-1; i>-1; i--) {
  Particle p = pts.get(i);
  if (p.dead) {
  pts.remove(i);
  }
  }
}

Reset programme avec la touche “A”

void keyPressed() {
  if (key == 'a') {
    for (int i=pts.size()-1; i>-1; i--) {
      Particle p = pts.get(i);
      pts.remove(i);
    }
    background(0);
  }
}

Création class particule

class Particle {
  PVector loc, vel, acc;
  int lifeSpan, passedLife;
  boolean dead;
  float alpha, weight, weightRange, decay, xOffset, yOffset;
  color c;

  Particle(float x, float y, float xOffset, float yOffset) {
    loc = new PVector(x, y);

    float randDegrees = random(360);
    vel = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees)));
    vel.mult(random(5));

    acc = new PVector(0, 0);
    lifeSpan = int(random(30, 20)); //intensité
    decay = random(0.50, 0.5); //decalage
    c = color(random(100), random(100), random(100), 255);
    weightRange = random(20); //rayon

    this.xOffset = xOffset;
    this.yOffset = yOffset;
  }
  
  void update() {
    if (passedLife>=lifeSpan) {
      dead = true;
    } else {
      passedLife++;
    }

    alpha = float(lifeSpan-passedLife)/lifeSpan * 30+100;
    weight = float(lifeSpan-passedLife)/lifeSpan * weightRa