Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2017-07-23 22:26:23 faire tourner une méthode en boucle

PHIFO
membre
Date d'inscription: 2014-04-27
Messages: 83

faire tourner une méthode en boucle



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

 

#2 2017-07-23 23:39:30 Re : faire tourner une méthode en boucle

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 733

Re: faire tourner une méthode en boucle



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

 

#3 2017-07-24 00:47:22 Re : faire tourner une méthode en boucle

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 125
Site web

Re: faire tourner une méthode en boucle



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

 

#4 2017-07-24 17:46:21 Re : faire tourner une méthode en boucle

PHIFO
membre
Date d'inscription: 2014-04-27
Messages: 83

Re: faire tourner une méthode en boucle



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

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017