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