Annonce

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


#1 2016-05-30 17:11:57 Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Placer texte aleatoire sur point aleatoire



Bonjour,

N'ayant pas eu de réponses lors d'un précédent post j'ai changé l'idée de mon rendu en espérant que cela soit plus simple ^^.

Voila donc l'idée c'est que j'ai mon visuel (voir plus bas le code) et je souhaiterais faire apparaitre des mots sur les points. En tout il y aurai 10 mots qui se place aléatoirement sur 10 des points présents sur le visuel.

Comment puis-je m'y prendre, déjà j'ai réussi à placer les mots sur tout les points il suffirait donc de limiter le nombre de mots mais je ne sait pas comment faire j'ai laissé mon test en commentaire dans le code.

Merci pour votre aide

voici le code :

Particle[] pArray;               

void setup()
{

    size( 1000, 500,P3D);           
    smooth(4);           
    strokeWeight(1); 
    stroke(0, 2, 120);
   
    pArray = new Particle[1000];   

    for( int i=0; i<pArray.length; i++ )
    {
        pArray[i] = new Particle( random( width ), random( height ), 0 );
        pArray[i].vel.set( 0, 0, 0);
    }
   
}


void draw()

  {

    background(255);
    fill(0);
    stroke(0, 20);
    strokeWeight(1);

    for ( int i=0;i<pArray.length;i++ )
    {
        pArray[i].update();         
    }
   //adding in network
    for (int i = 0; i < pArray.length-1; i++) {
      for (int j = i; j < pArray.length; j++) {
        if (dist(pArray[j].pos.x, pArray[j].pos.y, pArray[i].pos.x, pArray[i].pos.y) < 33) {
          line(pArray[j].pos.x, pArray[j].pos.y, pArray[i].pos.x, pArray[i].pos.y);
        }
      }
    }

   for ( int i=0;i<pArray.length;i++ )
     {
        pArray[i].draw();             
    }

}


void mouseReleased()
{
    println( "Mouse released!" );
    for ( int i=0;i<pArray.length;i++ )         
    {
        pArray[i].attract = !pArray[i].attract; 
       
  }
}

class Particle
{

    PVector pos;   
    PVector vel;   
    PVector acc;   

    boolean attract;   

 
    Particle( float x, float y, float z )
    {
       
        pos = new PVector(x, y, z);   
        vel = new PVector();
        acc = new PVector();
        attract = true;
    }

   
    void update()
    {
        mouseAttract();               
        vel.add( acc );             
        pos.add( vel );               
        vel.mult( 0.80f );           
        bounce();                     
        acc.set( 0, 0, 0 );         
    } 

//particules creation
   
    void draw()
    {

        colorMode( RGB, 255, 255, 255 );   
        ellipse( pos.x, pos.y, 5, 5 );   
        point(pos.x, pos.y);
        smooth(4);
        //text("1mot"+ "2mot" + "3mot" + "4mot" + "5mot" + "6mot" + "7mot" + "8mot" + "9mot" + "10mot", pos.x, pos.y);
       
    } 


    void bounce()
    {

        if ( pos.x < 0 || pos.x > width ) 
        {
            vel.x *= -1.0f;             
        }

        if ( pos.y < 0 || pos.y > height )
        {
            vel.y *= -1.0f;                 
        }
    }


 
    void mouseAttract()
    {
        float magnetism;       

        if ( attract == true )   
        {
            magnetism = -5.0f;   
        }
        else
        {
            magnetism = 5.0f;   
        }

        PVector mouse = new PVector( mouseX, mouseY );
        mouse.sub( pos );                             
       
        float magnitude = mouse.mag(); 
        acc.set( mouse );               

        acc.mult( magnetism / (magnitude * magnitude) ); 
    }
 
}


Emilie

Hors ligne

 

#2 2016-05-30 18:56:21 Re : Placer texte aleatoire sur point aleatoire

matheynen
membre
Date d'inscription: 2008-06-09
Messages: 226

Re: Placer texte aleatoire sur point aleatoire



Chouette petit code.
Voici quelques pistes :
tu crée une fonction drawTex() avec la ligne txt(...
que tu appelle dans ton draw() 10x
Le tout est de voir comment tu veux faire la partie aléatoire.
Comment les mots changent-ils et à quelle vitesse ?
Rien de très compliqué


Ce que vous avez fait au plus petit de mes frères, c'est à moi que vous l'avez fait.

Hors ligne

 

#3 2016-05-30 22:22:17 Re : Placer texte aleatoire sur point aleatoire

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

Re: Placer texte aleatoire sur point aleatoire



Bonsoir,

Il suffit de rajouter un champ mot initialisé dans le constructeur comme une chaîne vide. Dans le setup() {
tu réalises dix tirages aléatoires de l'indice et tu changes la valeur du champ.
Dans l'affichage de ta particule, si le champ n'est pas vide, tu l'affiches.

Particle[] pArray;               

void setup() {
  size(1000, 500, P3D);           
  smooth(4);            
  strokeWeight(1);  
  stroke(0, 2, 120); 
  pArray = new Particle[1000];   
  for (int i = 0; i < pArray.length; i++ ) {
    pArray[i] = new Particle(random( width ), random( height ), 0 );
    pArray[i].vel.set( 0, 0, 0);
  }
  for (int i = 0; i < 10; i++) {
    pArray[int(random(1000))].mot = "mot" + i;
  }
}

void draw() {
  background(255);
  fill(0);
  stroke(0, 20);
  strokeWeight(1);
  for (int i = 0; i < pArray.length; i++ ) {
    pArray[i].update();
  }
  //adding in network
  for (int i = 0; i < pArray.length-1; i++) {
    for (int j = i; j < pArray.length; j++) {
      if (dist(pArray[j].pos.x, pArray[j].pos.y, pArray[i].pos.x, pArray[i].pos.y) < 33) {
        line(pArray[j].pos.x, pArray[j].pos.y, pArray[i].pos.x, pArray[i].pos.y);
      }
    }
  }

  for (int i = 0; i < pArray.length; i++ ) {
    pArray[i].draw();
  }
}

void mouseReleased() {
  println( "Mouse released!" );
  for (int i = 0; i < pArray.length; i++ ) {
    pArray[i].attract = !pArray[i].attract;
  }
}

class Particle {
  PVector pos;    
  PVector vel;    
  PVector acc;    
  boolean attract;    
  String mot;

  Particle( float x, float y, float z ) {
    pos = new PVector(x, y, z);   
    vel = new PVector();
    acc = new PVector();
    attract = true;
    mot = "";
  }

  void update() {
    mouseAttract();               
    vel.add( acc );              
    pos.add( vel );               
    vel.mult( 0.80f );            
    bounce();                     
    acc.set( 0, 0, 0 );
  }  

  //particules creation

  void draw() {
    colorMode( RGB, 255, 255, 255 );    
    ellipse( pos.x, pos.y, 5, 5 );   
    point(pos.x, pos.y);
    smooth(4);
    if (mot != "") {
      text(mot, pos.x, pos.y);
    }
  }  

  void bounce() {
    if (pos.x < 0 || pos.x > width ) {
      vel.x *= -1.0f;
    }
    if (pos.y < 0 || pos.y > height ) {
      vel.y *= -1.0f;
    }
  } 

  void mouseAttract() {
    float magnetism;       
    if ( attract == true ) {
      magnetism = -5.0f;
    } else {
      magnetism = 5.0f;
    }
    PVector mouse = new PVector( mouseX, mouseY ); 
    mouse.sub( pos );                              
    float magnitude = mouse.mag();  
    acc.set( mouse );               
    acc.mult( magnetism / (magnitude * magnitude) );
  }
}

Hors ligne

 

#4 2016-06-07 10:35:45 Re : Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Re: Placer texte aleatoire sur point aleatoire



salut, merci pour les réponses j'ai trouvé en fait j'ai utilisé les string pour lister mes mots et ensuite les injecter en aléatoire sur certains des points aléatoire smile par contre du coup je suis coincé sur un autre point c'est que je souhaiterai mettre une forme au milieu et que mes lignes rebondissent dessus ( qu'elles ne passent pas dessous )
merci pour votre aide en tout cas smile

Hors ligne

 

#5 2016-06-07 15:34:25 Re : Placer texte aleatoire sur point aleatoire

matheynen
membre
Date d'inscription: 2008-06-09
Messages: 226

Re: Placer texte aleatoire sur point aleatoire



Un moyen simple et d'ajouter des conditions à ta fonction bounce().
Comme si les objets arrivaient sur le bord.
Il faut voir maintenant si ta forme est simple du genre carré.
Que veux-tu mettre au centre ?


Ce que vous avez fait au plus petit de mes frères, c'est à moi que vous l'avez fait.

Hors ligne

 

#6 2016-06-09 09:47:14 Re : Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Re: Placer texte aleatoire sur point aleatoire



matthieu a écrit:

Un moyen simple et d'ajouter des conditions à ta fonction bounce().
Comme si les objets arrivaient sur le bord.
Il faut voir maintenant si ta forme est simple du genre carré.
Que veux-tu mettre au centre ?

c'est ce que je me suis dis, ca serait une ellipse à mettre au centre mais deja pour le test un carré serait plus simple à définir je pense ^^

Hors ligne

 

#7 2016-06-09 10:12:18 Re : Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Re: Placer texte aleatoire sur point aleatoire



en fait le soucis que j'ai c'est que oui je peux les contenir dans un carré mais le contraire me parait compliqué il faudrait qu'ici : if ( pos.y < 250 || pos.y > 500 )  pour les tailles au lieu de mettre juste 250 je puisse en mettre 2 du genre de 0 à 250 et pour l'autre de 500 à 1000 ce qui laisserait un trou de 250 au milieu mais je sait pas si c'est possible d'écrire ca :s enfin je voit pas comment ou alors ma réflexion n'est pas bonne et il y a un autre moyen

Hors ligne

 

#8 2016-06-09 15:47:34 Re : Placer texte aleatoire sur point aleatoire

matheynen
membre
Date d'inscription: 2008-06-09
Messages: 226

Re: Placer texte aleatoire sur point aleatoire



Essaye avec ça alors https://processing.org/reference/PVector_dist_.html
Et tu te sert du rayon de ton ellipse

Dernière modification par matthieu (2016-06-09 15:48:59)


Ce que vous avez fait au plus petit de mes frères, c'est à moi que vous l'avez fait.

Hors ligne

 

#9 2016-06-09 17:09:49 Re : Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Re: Placer texte aleatoire sur point aleatoire



en fin de compte c'est un carré que je dois faire mais je ne comprend pas (la fatigue du soir surement) comment intégrer mes valeurs à mon bounce, en fait c'est la rédaction qui me pose problème ^^. merci pour ton aide en tout cas smile

Dernière modification par georges4242 (2016-06-09 17:10:06)

Hors ligne

 

#10 2016-06-09 18:27:12 Re : Placer texte aleatoire sur point aleatoire

matheynen
membre
Date d'inscription: 2008-06-09
Messages: 226

Re: Placer texte aleatoire sur point aleatoire



Je dirais en vitesse sans avoir tester

void bounce() {
    if (pos.x < 0 || pos.x > width || (pos.x > 100 && pos.y > 50 && pos.y < 150)) { // à faire pour chaque côté du carré
      vel.x *= -1.0f;
    }
    if (pos.y < 0 || pos.y > height ) {
      vel.y *= -1.0f;
    }
  }


Ce que vous avez fait au plus petit de mes frères, c'est à moi que vous l'avez fait.

Hors ligne

 

#11 2016-06-10 10:26:01 Re : Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Re: Placer texte aleatoire sur point aleatoire



ah d'accord je vois mais ca va pas créer un conflit entre chacun des cotés non ?

Hors ligne

 

#12 2016-06-10 10:29:45 Re : Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Re: Placer texte aleatoire sur point aleatoire



ah bah non je suis bête j'ai rien dit ^^. bon je vais tester tout ca merci beaucoup smile

Hors ligne

 

#13 2016-06-10 14:06:11 Re : Placer texte aleatoire sur point aleatoire

georges4242
membre
Date d'inscription: 2016-05-11
Messages: 10

Re: Placer texte aleatoire sur point aleatoire



merci beaucoup du coup j'ai fait comme ca :

if ((pos.x > 380 && pos.x < 600 && pos.y > 150 && pos.y < 350) )
{
vel.x *= -3.0f;
}
   
   
if ((pos.x > 380 && pos.x < 600 && pos.y > 150 && pos.y < 350) )
{
vel.y *= -3.0f;
}

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024