======Affiche interactive : Un monde quantique======
* Porteur(s) du projet : Mauffrey Léa
* Date : 14/01/2019
* Licence : libre
* Contexte : Cours de Processing avec Damien Muti
=====Description=====
Ce Programme a pour but de représenter graphiquement des principes de base de la physique quantique pour les rendre accessibles au public. Le programme doit être projeté sur l'affiche qui se compose de trois titres. Chacun des titres est associé à un bouton qui déclenche à la fois le texte explicatif et l'animation associé.
Le programme génère plusieurs balles, qui représente les particules en physique quantique, qui vont changer de comportement en fonction du bouton pressé.
=====Affiche=====
{{:wiki:projets:affiche-interactive-un-monde-quantique:affiche_interactive.png?200|}}
L'affiche reprend les couleurs des particules dans mon code. AU centre de chaque cercle bleu il y aura un des capteurs qui affichera le code et le texte qui correspond au titre à coté du bouton.
===== Algorithme =====
Le code déclenche des animations et du textes associé au titre écrit sur l'affiche.
La touche B stop la particule dans son déplacement et la fait vibrer autour de sa position (x,y). + apparition du texte correspondant à __un monde non localisé__.
La touche V stop la vibration et fait avancer les particules. + apparition du texte correspondant à __Un monde en mouvement__.
La touche N fait augmenter la taille des particules. + apparition du texte correspondant à __La décohérence__.
=====Programme=====
//Déclaration des variables globales
ArrayList particule; //tableau de particule
int N=10; //nombre de particule de base dans le tableau
int t=0; //variable de temps
PFont police; //création de texte
boolean t1=false; //texte 1
boolean t2=false; //texte 2
boolean t3=false; //texte 3
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
// initialisation des variables globales et des paramètres d'affichage
size(800, 800); //taille
t = millis(); //variable temps = en milliseconde
police=loadFont("Avenir-Light-20.vlw"); //importation de la typographie
textFont(police);
background(255);
noStroke();
// création d'un TABLEAU DYNAMIQUE VIDE (ArrayList)
particule = new ArrayList();
// remplir le tableau avec des particules
for (int i=0; i2) { //si le nombre d'image après le rebond est supérieur à 2
p.d++ ; // le diamètre de la particule augmente
}
t1=false;
t2=false; // le texte 2 disparaît
t3=true; //le texte 3 s'affiche
}
}
}
==== Class ====
Cette class sert à créer les particules du tableau. L'attribut de la class correspond à toutes les variables appliqué à l'objet. Le constructeur sert à créer un espace mémoire pour les valeurs des variables et les méthodes servent créer les comportements des particules, dans ce cas __afficher__ la particule faire __avancer__ la particule et faire __rebondir__ la particule.
class Particule {
//attribut des particules
color c; // couleur
int x; // position x de la particule
int y; // position y de la particule
int x0; // valeur pour garder en mémoire la position de x
int y0; // valeur pour garder en mémoire la position de y
int dx; // déplacement x
int dy; // déplacement y
int d; //diamètre
int nbFrameApresRebond; // nb de frames après rebonds d'une particule
boolean vibration = false; // variable
//constructeur, instancier un espace mémoire pour les valeurs de la particule
Particule(int _x, int _y, int _dx,
int _dy, int _d, color _c) {
x = _x;
y = _y;
dx = _dx;
dy = _dy;
d = _d;
c = _c;
x0 = 0; // la valeur est directement instencier, à 0 de base
y0 = 0;
nbFrameApresRebond =0;
}
//méthodes
//créer particlue
void afficher() {
fill(c);
ellipse(x, y, d, d);
}
// avancer
void avancer() {
if (vibration == false) { //on verifie que la variable vibration = false (fausse)
x += dx; // equivalent x = x + dx
y = y + dy;
} // si vibration est fausse on ajoute la valeur du déplacement à celle de la position de x et d'y
// on fait donc avancer la particule
else { // sinon, si la variable vibration = true (vrai)
x = x0+ floor(random(-2, 2)); // random sur la position
y = y0 + floor(random(-2, 2));
}
}
//rebondir
void rebondir() {
if ((x+d/2 >= width) || (x-d/2 <= 0)) { // bord droit
dx = dx * (-1); // sens inverse
nbFrameApresRebond=0;
}
if ((y+d/2 >= height) || (y-d/2 <= 0)) { // bord droit
dy = dy * (-1); // sens inverse
nbFrameApresRebond = 0;
}
}
}
Création de particule
Particule creerParticule () {
Particule a;
//instanciation (création) de la particule
int x = width/2; // position x
int y =height/2; // position y
int dx = floor(random(-2, 2)); //déplacement x
int dy = floor(random(-2, 2)); //déplacement y
int d = floor(random(10, 30)); //diamètre de la particule
color c = color(random(50,200),235,205); //couleur avec la valeur rouge(rgb) aléatoire entre 50 et 200
a= new Particule(x, y, dx, dy, d, c);
return a;
}
Création d'une autre particule de couleur différente
Particule creerParticule2 () {
Particule a;
//instanciation (création) de la balle
int x = width/2; // position x
int y =height/2; // position y
int dx = floor(random(-2, 2)); //déplacement x
int dy = floor(random(-2, 2)); //déplacement y
int d = floor(random(10, 30)); //diamètre
color c = color(random(80,130),61,145); //couleur(variation de couleur sur le rouge)
a= new Particule(x, y, dx, dy, d, c);
return a;