* Cop d'avance : axe 5, bien vivre en PACA
Qualité illustrations
source du programme (.zip), inutile de tout expliquer - commenter le programme directement
Orthographe!! Expression!
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.
V1 (juste les particules)
Début description programme
// 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