Bonjour à toutes et tous
Pour mon installation artistique, j’aimerais à partir du mouvement d’un point tournant à vitesse constante, pouvoir faire que 9 autres points suivent le premier avec des décalages temporels et spatiaux.
Cette partie fonctionne . Merci Mike.
Maintenant, j'aimerais l'essayer, non plus à partir d’un point tournant, mais d'un point qui oscille de 0 à 180°, comme un pendule et à vitesse constante.
Peut on simplement changer l'équation du programme? celle commentée // position du point de depart + vitesse * phi constant ==> ici vitesse du point phases[0] est constante
Merci
String debug =""; // MANAGE PERSPECTIVE import peasy.*; // change these for screen size float w = 1000; float h = 800; // don't change these float w2 = w / 2; float h2 = h / 2; int frameRatio = 25; // nombre d'image/seconde ou nombre de fois que la bouche principale du programme void draw() tourne en un seconde int nbBall = 10; int nbMaxDelais = 2000; float [][] phases = new float[nbBall][nbMaxDelais]; void setup() { new PeasyCam(this, 2000); frameRate(frameRatio); for (int i = 0; i < nbBall; i++) { for (int j = 0; j < nbMaxDelais; j++) phases[i][j] = PI; } } public void settings() { size(600, 600, P3D); } void draw() { println(frameCount + ": " + ( debug )); background(0); translate(width/2, -height/2, -1000);// To set the center of the perspective rotate(-HALF_PI ); //TO change the beginning of the 0 (cercle trigo) and the cohesion point to - HALF_PI phases[0][frameCount % nbMaxDelais]= PI + (frameCount / 5.0) * cos (1000 / 500.0); // position du point de depart + vitesse * phi constant ==> ici vitesse du point phases[0] est constante //point O tourne dans le sens anti-horaire à vitesse constante // phases[0][frameCount % nbMaxDelais]= TWO_PI + (frameCount / 50.0) * cos (frameCount / 500.0); //position du point de depart + vitesse* phase sinusoidale ==> ici vitesse 0 progresse suivant une sinusoidale //point O tourne dans les deux sens à vitesse non constante. Je cherche un mouvement pendulaire drawBall(0, phases[0][frameCount % nbMaxDelais] ); // affiche le point 0 for (int i = 1; i < nbBall; i++) { // follow( i-1, i, 20 * i, 0); // Modifier les deux derniers paramètres : délais et phase follow( i-1, i, 0 , QUARTER_PI); // ici, le temps que les points mettent à se suivre est nul, donc l'espace entre eux est constant, il est 180/4=45° drawBall(i, phases[i][frameCount % nbMaxDelais] ); } /* for(int i = 0; i < nbBall; i++) { //Animation brute sans suivi, juste avec une formule //drawBall(i, PI + (i * frameCount / 50.0) * cos (frameCount / 500.0) ); }*/ } void drawBall(int n, float phase) { pushMatrix(); translate(-w2, -h2, -1000); noStroke(); float side = height*0.15*1/nbBall; float rayon = width/2; float x = rayon*cos(phase); float y = rayon*sin(phase); translate (x, y, 200+(50*5*n)); colorMode(RGB, 255, 255, 255); fill( 0, 255, 0 ); sphere(side*3); popMatrix(); } void follow( int target, int follower, int delais, float deltaphase) { int step = frameCount % nbMaxDelais; int followedStep = (step + nbMaxDelais - delais) % nbMaxDelais; phases[follower][step] = diffAngle(phases[target][followedStep] + deltaphase, 0); } float diffAngle(float angle1, float angle2) { // return the difference angle1 - angle2 between two angle between -PI PI float result = angle1 - angle2; while (result > PI) { result -= 2 * PI; } while (result < -PI) { result += 2 * PI; } return result; }