Annonce

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


#1 2010-07-30 01:26:17 Problème de boucle for

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Problème de boucle for



Salut tout le monde,

Je m'entraîne actuellement aux objets et je bute sur un problème dont je n'arrive pas à trouver la cause. J'essaie de créer plusieurs instances d'un objets avec une boucle for, le sketch s'exécute bien, mais il ne semble pas prendre en compte ma condition de sortie et s'exécute indéfiniment. J'ai essayé en remplaçant la boucle for par une boucle if mais le problème n'est pas totalement résolu.

Quelqu'un aurait-il une idée sur l'origine du problème?

Par avance merci,
Ars Robota


myspace.com/arsrobota

Hors ligne

 

#2 2010-07-30 09:20:15 Re : Problème de boucle for

22_
membre
Lieu: paris
Date d'inscription: 2010-04-08
Messages: 189

Re: Problème de boucle for



Salut,

Quelle est exactement ta condition de sortie ?

Hors ligne

 

#3 2010-07-30 10:07:03 Re : Problème de boucle for

pob
Exterminator
Lieu: Rennes
Date d'inscription: 2009-10-13
Messages: 765
Site web

Re: Problème de boucle for



Ça ne pourrait pas être un nom de variable utilisé deux fois ? Genre dans la création des objets ?

Hors ligne

 

#4 2010-07-30 10:22:07 Re : Problème de boucle for

videoactif
membre
Lieu: Morteau
Date d'inscription: 2010-01-27
Messages: 52

Re: Problème de boucle for



Pouvons nous voir le code en question ? Cela serait plus parlant


Programming is like sex: one mistake and you’re providing support for a lifetime.  Michael Sinz

Hors ligne

 

#5 2010-07-30 11:23:18 Re : Problème de boucle for

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Re: Problème de boucle for



Salut les gars et merci de vos réponses,
C'est bizarre, j'avais joint le fichier pde mais il n'apparaît pas... Je vous met le code:

Pollen myPollen=new Pollen(3);

void setup() {
  size(300,300);
  background(255);
  smooth();
}

void draw() {
  myPollen.spread();
  myPollen.display();
}

class Pollen {
  int i;
  float a;
  float j;
  float s;
  float xoff;
  float grayCol;
  int nbr;
  
  Pollen(int tempNbr) {
    xoff=0.0;
    i=0;
    nbr=tempNbr;
  }
  
  void spread() {
    for(i=0;i<nbr;i++) {
      j=noise(xoff)*height;
      s=random(2, 20);
      grayCol=noise(xoff)*255;
      xoff+=0.1;
      a+=width/30;
    }
//    if(i<5) {
//      s=random(5, 30);
//      grayCol=noise(xoff)*255;
//      j=noise(xoff)*height;
//      xoff+=0.1;
//      a+=width/5;
//      i++;
//    }
  }
  
  void display() {
    noStroke();
    fill(grayCol, grayCol*2);
    ellipse(a, j, s, s);
    
    float wh=s*1.5;
    stroke(0);
    noFill();
    stroke(grayCol, grayCol*2);
    ellipse(a, j, wh, wh);
  }
}

Merci!


myspace.com/arsrobota

Hors ligne

 

#6 2010-07-30 11:47:23 Re : Problème de boucle for

pob
Exterminator
Lieu: Rennes
Date d'inscription: 2009-10-13
Messages: 765
Site web

Re: Problème de boucle for



Si tu mets println(i); dans la boucle tu verras que la boucle recommence sans cesse.
Ta boucle draw() est exécutée en boucle.

Pollen myPollen=new Pollen(3);

  int exec = 0;
  
void setup() {
  size(300,300);
  background(255);
  smooth();
}

void draw() {
  if (exec<1) {
  myPollen.spread();
  myPollen.display();
  exec=1;
  }
}

class Pollen {
  int i;
  float a;
  float j;
  float s;
  float xoff;
  float grayCol;
  int nbr;
  
  Pollen(int tempNbr) {
    xoff=0.0;
    i=0;
    nbr=tempNbr;
  }
  
  void spread() {
    for(i=0;i<nbr;i++) {
      j=noise(xoff)*height;
      s=random(2, 20);
      grayCol=noise(xoff)*255;
      xoff+=0.1;
      a+=width/30;
      println(i);
    }
//    if(i<5) {
//      s=random(5, 30);
//      grayCol=noise(xoff)*255;
//      j=noise(xoff)*height;
//      xoff+=0.1;
//      a+=width/5;
//      i++;
//    }
  }
  
  void display() {
    noStroke();
    fill(grayCol, grayCol*2);
    ellipse(a, j, s, s);
    
    float wh=s*1.5;
    stroke(0);
    noFill();
    stroke(grayCol, grayCol*2);
    ellipse(a, j, wh, wh);
  }
}

La condition "exec" permet de ne faire le dessin qu'une fois. Je ne sais pas si c'est ce que tu cherchais à faire...

Dernière modification par pob (2010-07-30 11:48:36)

Hors ligne

 

#7 2010-07-30 12:15:59 Re : Problème de boucle for

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Re: Problème de boucle for



Salut pob et merci du tuyau.

Effectivement, c'est ce que je cherche à faire; il me semblait bien que draw() allait exécuter ma boucle en continu, j'ai donc essayé en appelant la fonction spread() dans setup(): plusieurs instances de mon objet ont bien été créées mais elles se trouvaient toutes aux même coordonnées.

Deuxième petite question: sachant tout ça, j'essaie d'automatiser la boucle if(exec<myPollen.length) mais p5 me renvoie un message d'erreur "myPollen.length cannot be resolved or is not a field"...

Pollen myPollen=new Pollen(5);

int exec=0;

void setup() {
  size(300,300);
  background(255);
  smooth();
}

void draw() {
  if(exec<myPollen.length) {
    myPollen.spread();
    myPollen.display();
    exec++;
  }
}

class Pollen {
  int i;
  float a;
  float j;
  float s;
  float xoff;
  float grayCol;
  int nbr;

  Pollen(int tempNbr) {
    xoff=0.0;
    i=0;
    nbr=tempNbr;
  }

  void spread() {
    for(i=0;i<nbr;i++) {
      j=noise(xoff)*height;
      s=random(2, 20);
      grayCol=noise(xoff)*255;
      xoff+=0.1;
      a+=width/30;
    }
    //    if(i<5) {
    //      s=random(5, 30);
    //      grayCol=noise(xoff)*255;
    //      j=noise(xoff)*height;
    //      xoff+=0.1;
    //      a+=width/5;
    //      i++;
    //    }
  }

  void display() {
    noStroke();
    fill(grayCol, grayCol*2);
    ellipse(a, j, s, s);

    float wh=s*1.5;
    stroke(0);
    noFill();
    stroke(grayCol, grayCol*2);
    ellipse(a, j, wh, wh);
  }
}

Dernière modification par Ars Robota (2010-07-30 12:29:30)


myspace.com/arsrobota

Hors ligne

 

#8 2010-07-30 12:38:46 Re : Problème de boucle for

pob
Exterminator
Lieu: Rennes
Date d'inscription: 2009-10-13
Messages: 765
Site web

Re: Problème de boucle for



Il faut juste déplacer ton appel pour display() dans la boucle de spread() et tu auras tes trois points, sinon tu as juste un seul point vu qu'il n'y a pas de boucle dans display() et que ça n'affiche que le premier point dans ce cas.

Pollen myPollen=new Pollen(3);

  int exec = 0;
  
void setup() {
  size(300,300);
  background(255);
  smooth();
}

void draw() {
  if (exec<1) {
  myPollen.spread();

  exec=1;
  }
}

class Pollen {
  int i;
  float a;
  float j;
  float s;
  float xoff;
  float grayCol;
  int nbr;
  
  Pollen(int tempNbr) {
    xoff=0.0;
    i=0;
    nbr=tempNbr;
  }
  
  void spread() {
    for(i=0;i<nbr;i++) {
      j=noise(xoff)*height;
      s=random(2, 20);
      grayCol=noise(xoff)*255;
      xoff+=0.1;
      a+=width/30;
      myPollen.display();
      println(i);
      println(j);
      println(s);
    }
//    if(i<5) {
//      s=random(5, 30);
//      grayCol=noise(xoff)*255;
//      j=noise(xoff)*height;
//      xoff+=0.1;
//      a+=width/5;
//      i++;
//    }
  }
  
  void display() {
    noStroke();
    fill(grayCol, grayCol*2);
    ellipse(a, j, s, s);
    
    float wh=s*1.5;
    stroke(0);
    noFill();
    stroke(grayCol, grayCol*2);
    ellipse(a, j, wh, wh);
  }
}

Sinon tu peux sortir ta boucle de spread pour la mettre dans draw().

Dernière modification par pob (2010-07-30 13:54:12)

Hors ligne

 

#9 2010-07-30 13:03:40 Re : Problème de boucle for

22_
membre
Lieu: paris
Date d'inscription: 2010-04-08
Messages: 189

Re: Problème de boucle for



il y a quelques réflexes de vvvv-istes quand même smile

@Ars : tu ne peux effectivement pas appeller if(exec<myPollen.length)
car length est un attribut de tableau -> int[] par exemple

Je te rappelle vite fait le paradigme de p5:
ta fonction setup() exécutée une seule fois au début de l'exécution
puis ta fonction draw() qui est elle-même une boucle exécutée suivant le frameRate initialisé dans la fonction setup()

Bon courage

Hors ligne

 

#10 2010-07-30 13:47:59 Re : Problème de boucle for

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Re: Problème de boucle for



@pob: Super, c'est exactement ce qu'il me faut! Je vais étudier ça de plus près (histoire de capter pourquoi ça fonctionne). Saint-Cloud very moche!

@22_:

citation :

il y a quelques réflexes de vvvv-istes quand même

aaargh... Damned, je suis démasqué!

citation :

length est un attribut de tableau

C'est pourtant vrai, j'avais oublié ça.

Merci pour toutes ces précisions, gentlemen.

aR


myspace.com/arsrobota

Hors ligne

 

#11 2010-07-31 14:34:19 Re : Problème de boucle for

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Re: Problème de boucle for



Salut,

Maintenant que j'arrive à dessiner mes objets, je voudrai les faire bouger selon un genre de champ vectoriel simple. Problème: je ne sais pas où placer l'animation de noise(), vu que l'ensemble des objets n'est dessiné qu'une fois dans draw() grâce à l'utilisation d'un compteur exec...

Quelqu'un pourrait-il m'aider?

Merci beaucoup
Ars Robota


myspace.com/arsrobota

Hors ligne

 

#12 2010-07-31 15:45:29 Re : Problème de boucle for

pob
Exterminator
Lieu: Rennes
Date d'inscription: 2009-10-13
Messages: 765
Site web

Re: Problème de boucle for



Tu peux peut-être sortir la fonction qui dessine et lui intégrer sa boucle à elle pour la séparer de celle qui détermine les paramètres.
A ce moment le dessin peut être fait à chaque cycle et sera modifié par ta fonction de champ...

Dernière modification par pob (2010-07-31 15:47:42)

Hors ligne

 

#13 2010-07-31 23:53:39 Re : Problème de boucle for

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Re: Problème de boucle for



Oui mais c'est ce que j'ai essayé de faire au départ mais, du coup, ma fonction de dessin tourne indéfiniment... Résultat: j'ai 100 instances qui s'affichent bien et une infinité d'objets mal positionnés.

Ou alors, je met n=n+d sans boucle dans draw() ?


myspace.com/arsrobota

Hors ligne

 

#14 2010-08-01 01:26:41 Re : Problème de boucle for

pob
Exterminator
Lieu: Rennes
Date d'inscription: 2009-10-13
Messages: 765
Site web

Re: Problème de boucle for



Avec background() tu peux effacer avant de redessiner.

Et exec ne servait qu'à placer les éléments. Si tu veux les animer, il faut mettre à jour leur position, donc on laisse tomber cette condition.
Tu peux mettre un delay(100) dans ta boucle pour laisser le temps de voir les grains que tu dessines.

Pour les histoires de boucles, dans ce cas il aurait fallu créer un matrice pour stocker toutes les coordonnées et les passer de la routine de détermination des positions à celle d'affichage. Mais ça marche tout aussi bien à ce moment de revenir à la version où on appelle display() depuis spread().

Je regarderai ça un peu mieux demain. Il est tard...

Hors ligne

 

#15 2010-08-01 01:53:37 Re : Problème de boucle for

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Re: Problème de boucle for



ah oui, j'oublais background()... Merci du rappel!


myspace.com/arsrobota

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024