Bonjour,
Dans l'exemple ci-dessous je voudrais que la méthode void RECT() tourne en boucle
C'est à dire que le caré démarre à x=5 et y=5.
Puis se déplace vers le bas et revient à la position x=5 et y =5. Puis recommence tout le temps.
Je n'arrive pas à comprendre ce que je peux utiliser comme commande pour créer ce mouvement.
RECT() est extérieur à draw() car d'autre méthodes doivent se greffer dessus.
Merci de m'expliquer le principe pour créer de telles boucles
Philippe
float x=5;
float y = 5;
float[] V={1,0.5,-1,-2};
float [] W={1,0.5,-1};
void setup(){
size (600,600);
}
void draw(){
background(0);
println ("frameCount:", frameCount);
println ("x:",x);
RECT();
}
void RECT(){
translate(x,y);
rect (0,0,200,200);
x += V[0];
y += W[0];
if (x >150){
V[0]=V[1];
W[0]=W[1];
}
if (x >300){
V[1] = V[2];
W[1] = W[2];
}
if( x<5){
x = 5;
y = 5;
}
}
Dernière modification par PHIFO (2017-07-23 22:27:35)
Hors ligne
Bonsoir,
Le mouvement peut se décomposer en plusieurs phases. Il faut donc introduire une variable phase que tu incréments quand le carré franchit des points :
float x=5; float y = 5; float[] V={1, 0.5, -1}; float [] W={1, 0.5, -1}; int phase; void setup() { size (600, 600); phase = 0; } void draw() { background(0); println ("frameCount:", frameCount); println ("x:", x); RECT(); } void RECT() { translate(x, y); rect (0, 0, 200, 200); x += V[phase]; y += W[phase]; if ((x >150) && (phase == 0)) { phase++; } if ((x >300) && (phase == 1)) { phase++; } if ((x<5) && (phase == 2)) { phase = 0; } }
Hors ligne
De mon côté j'ai regardé du côté de la fonction du signal triangulaire (signal périodique) pour attaquer le problème avec un biais "plus mathématique". https://fr.wikipedia.org/wiki/Signal_triangulaire
Je vois que Mushussu a déjà donné une réponse (pour changer :p) mais bon, ça en inspirera peut-être d'autres, on gagne pas tant que ça au change:
float x = 0; float y = 0; float d = 200; // taille rectangle float t; void setup(){ size(600, 600); } void draw(){ t+=1; // vitesse aller/retour background(0); RECT(); } void RECT(){ final float s1 = floor((t/d) + (1/2)); final float s2 = floor((t/d) - (1/2)); x += 2/d * (t - d * s1) * pow(-1, s2); y += 2/d * (t - d * s1) * pow(-1, s2); rect(map(x, 0, d , 0, width - d), map(y, 0, d , 0, height - d), d, d); }
Ce n'est donc pas la fonction RECT() qui tourne en boucle, mais c'est en revanche le mouvement du carré qui est périodique.
Dernière modification par jojolaglaise (2017-07-24 01:02:16)
Hors ligne
Merci pour les réponses.
Les variables phases sont plus adaptées au sketch que je développe qui est plus complexe que le carré et ça m'ouvre des possibilités.
Hors ligne
Pages: 1