Annonce

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


#1 2014-05-13 11:46:26 ordonner un processus aléatoire

CRAVEN
nouveau membre
Date d'inscription: 2014-05-13
Messages: 7

ordonner un processus aléatoire



Bonjour

Je suis un assez novice sur processing, et j'aurais besoin d'aide pour créer un logo intéractif.
Mon idée était de partir d'un cercle composé de points, et quand on passe la souris sur celui-ci,
les éléments se disperse et vienne créer le chiffre 4.
Pour cela j'ai fait plusieurs recherches.
J'ai réussi a trouver un code pour la partie sur le processus aléatoire (le cercle et les points)
et j'ai également trouvé un code pour écrire des lettres/chiffres avec des formes.

Je pense qu'il faut allié les deux, mais je ne sais pas trop comment faire.
On m'a dis qu'il fallait que je télécharge la bibliothèque géomérative...

Bref, pouvez vous m'aider ? smile smile smile smile


Code 1

Code 2

void setup() {
  ...
  RG.init(this)
  font = new RFont("FreeSans.ttf", 200, RFont,LEFT);
  
  RCommand.setSegmentLength(10);
  RCommand.setSegmentator(RCommand.UNIFORMLENGHT);
  
}

void draw () {
  ...
  RGoup grp;
  grp=font.toGroup(textTyped);
  grp=grp.toPolygonGroup();
  RPoint[] pnts=grp.getPoints() 
  
  stroke(255, 132, 8);
  strokeWeight(2);
  for (int i=0; i < pnts.length; i++) {
    float l=5;
    line(pnts[i].x-l, pnts[i].y-l,
    pnts[i].x+l, pnts[i].y+l);
    
  }
  
  fill(0);
  noStroke();
  for(int i=0, i< pnts,length; i++) {
    float diameter = 18;
    if (i%2 == 0) ellipse(pnts[i].x.pnts[i].y,
    diameter, diameter);
    
  }
  ...
}

Hors ligne

 

#2 2014-05-13 12:59:47 Re : ordonner un processus aléatoire

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

Re: ordonner un processus aléatoire



Bonjour,

Pour former ton 4, la bibliothèque le construit avec un certain nombre de disques. Ce nombre varie en fonction de la police, la taille et le paramètre que tu passes avec la méthode RCommand.setSegmentLength(5). Pour le programme ci-dessous, j'ai 195 points de définis.
J'ai créé une classe permettant de stocker les différents éléments constitutifs dont tu as besoin.
C'est un 4 qui explose en fonction des mouvements sur l'axe X du pointeur.
Il te reste à intégrer la formation en cercle.

import geomerative.*;

RFont font;

ArrayList<Balle> balles;
String texte = "4";

void setup() {
  size(800, 800);
  background(255);
  smooth();
  RG.init(this); 
  font = new RFont("FreeSans.ttf", 200, CENTER);

  fill(255, 0, 0);
  noStroke();

  RCommand.setSegmentLength(5);//ASSIGN A VALUE OF 10, SO EVERY 10 PIXELS
  RCommand.setSegmentator(RCommand.UNIFORMLENGTH);

  RGroup myGroup = font.toGroup(texte); 
  myGroup = myGroup.toPolygonGroup();

  RPoint[] myPoints = myGroup.getPoints();
  balles = new ArrayList<Balle>();
  for (int i = 0; i < myPoints.length; i++) {
    balles.add(new Balle(myPoints[i].x + width /2, myPoints[i].y + height / 2));
  }
}

void draw() {
  background(255);
  for (Balle b : balles) {
    b.miseAJour((float)mouseX / width);
    b.affichage();
  }
}

class Balle {
  PVector origine, destination, position;
  
  Balle(float x, float y) {
    origine = new PVector(x, y);
    position = origine.get();
    destination = new PVector((int)random(0, width), (int)random(0, height));
  }
  
  void miseAJour(float parametre) {
    position = PVector.lerp(origine, destination, parametre);
  }
  
  void affichage() {
    ellipse(position.x, position.y, 10, 10);
  }
}

C'est très agréable d'aider quelqu'un qui a fait des recherches préalablement.

Hors ligne

 

#3 2014-05-13 13:23:02 Re : ordonner un processus aléatoire

CRAVEN
nouveau membre
Date d'inscription: 2014-05-13
Messages: 7

Re: ordonner un processus aléatoire



Merci pour ton code smile !!
Mais du coup j'ai chercher quelques sites pour télécharger la bibliothèque géomérative mais je ne trouve pas vraiment...
Tu ne sais pas ou je pourrais trouver sa ?

Merci d'avance wink

Hors ligne

 

#4 2014-05-13 13:38:57 Re : ordonner un processus aléatoire

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

Re: ordonner un processus aléatoire



Si tu as Processing 2.1, ce que je te recommande, va dans Sketch > Import Library > Add Library …
Une fenêtre de dialogue s'ouvre.
Dans le champ de recherche tape geomerative puis clique sur geomerative
Un bouton installe apparaît et clique dessus

Hors ligne

 

#5 2014-05-13 14:01:32 Re : ordonner un processus aléatoire

CRAVEN
nouveau membre
Date d'inscription: 2014-05-13
Messages: 7

Re: ordonner un processus aléatoire



Coooool, merci c'est bon j'ai trouvé smile
Du coup j'ai essayé ton sketch, mais il ne me trouve pas la typo...
Ce qui est normal j'imagine car c'est une typo que tu as du choisir toi et que je n'ai peut être pas..
Comment est ce que je peu faire pour insérer une font a moi et la faire fonctionner ?

merci d'avance wink

Hors ligne

 

#6 2014-05-13 14:19:17 Re : ordonner un processus aléatoire

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

Re: ordonner un processus aléatoire



Dans la documentation de la méthode RFont :
http://www.ricardmarxer.com/geomerative … html#RFont(java.lang.String,%20int,%20int)

Le premier paramètre est le chemin pour trouver le fichier rtf de la police.
Soit tu copies la police que tu souhaites dans le répertoire data de ton sketch
Soit tu prends celle que je te joint

Hors ligne

 

#7 2014-05-13 14:21:19 Re : ordonner un processus aléatoire

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: ordonner un processus aléatoire



Tu la glisses dans le dossier "data" de ton sketch comme tous les fichiers auxquels tu souhaites avoir un accès "facilement"...

Bon courage...


L'Amour au Peuple !

Hors ligne

 

#8 2014-05-13 14:22:18 Re : ordonner un processus aléatoire

top
membre
Date d'inscription: 2012-04-12
Messages: 43

Re: ordonner un processus aléatoire



le merci pour ton code de craven est je trouve un peu bref, j'aimerais ajouter TRES JOLI CODE
Déjà faut connaître geomerative, ce qui est pas évident...
En plus faut avoir un peu pratiqué cette librairie et en fin faut avoir l'idée d'associer un objet balle pour dissocier les coordonnées de chaque point - objet formant la lettre, j'aime beaucoup BRAVO

Hors ligne

 

#9 2014-05-13 15:06:46 Re : ordonner un processus aléatoire

CRAVEN
nouveau membre
Date d'inscription: 2014-05-13
Messages: 7

Re: ordonner un processus aléatoire



C'est bon j'y suis arrivé, merci smile
Du coup si je veux intégré du texte simple a côté du 4,
il me suffis d'utiliser la fonction text(), j'imagine que je la place juste après void setup ? smile

Hors ligne

 

#10 2014-05-13 15:19:22 Re : ordonner un processus aléatoire

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

Re: ordonner un processus aléatoire



Lorsque tu parles de texte simple, tu veux dire du texte qui n'explose pas !
Si oui alors, il faut le mettre dans le draw() normalement.
Si non, c'est la variable texte qu'il faut modifier.

Voici le code pour ton logo qui se transforme. C'est une touche qui fait office de déclencheur :

import geomerative.*;

RFont font;

ArrayList<Balle> balles;
String texte = "4";

void setup() {
  size(800, 800);
  background(255);
  smooth();
  RG.init(this); 
  font = new RFont("FreeSans.ttf", 200, CENTER);

  fill(255, 0, 0);
  noStroke();

  RCommand.setSegmentLength(5);
  RCommand.setSegmentator(RCommand.UNIFORMLENGTH);

  RGroup myGroup = font.toGroup(texte); 
  myGroup = myGroup.toPolygonGroup();

  RPoint[] myPoints = myGroup.getPoints();
  balles = new ArrayList<Balle>();
  for (int i = 0; i < myPoints.length; i++) {
    balles.add(new Balle(110 * cos((TWO_PI * i) / myPoints.length), 110 * sin((TWO_PI * i) / myPoints.length), 
    myPoints[i].x - 10, myPoints[i].y + 110));
  }
  println(myPoints.length);
}

void draw() {
  background(255);
  translate(width / 2, height / 2);
  for (Balle b : balles) {
    b.miseAJour();
    b.affichage();
  }
}

void keyPressed() {
  for (Balle b : balles) {
    b.etat = true;
  }
}

class Balle {
  PVector[] destination;
  PVector position;
  int compteurPosition;
  float compteur;
  boolean etat;

  Balle(float x, float y, float a, float b) {
    destination = new PVector[4];
    destination[0] = new PVector(x, y);
    destination[1] = PVector.random2D();
    destination[1].mult(random(500));
    destination[2] = new PVector(a, b);
    destination[3] = PVector.random2D();
    destination[3].mult(random(500));    
    position = destination[0];
    compteurPosition = 0;
    compteur = 0.0;
    etat = false;
  }

  void miseAJour() {
    if (etat) {
      compteur += 0.02;
      if (compteur > 1) {
        compteur = 0;
        compteurPosition = (compteurPosition + 1) % destination.length;
        if (compteurPosition % 2 == 0) {
          etat = false;
        }
      }
    }
    position = PVector.lerp(destination[compteurPosition], destination[(compteurPosition + 1) % destination.length], compteur);
  }

  void affichage() {
    ellipse(position.x, position.y, 10, 10);
  }
}

Dernière modification par Mushussu (2014-05-13 15:22:42)

Hors ligne

 

#11 2014-05-13 15:50:03 Re : ordonner un processus aléatoire

CRAVEN
nouveau membre
Date d'inscription: 2014-05-13
Messages: 7

Re: ordonner un processus aléatoire



Merci, c'est super !
Par contre j'arrive pas a comprendre toute les fonctions du sketch...
J'aimerais bien comprendre exactement les fonctions de ce qu'il y a dedans
Est-ce que tu pense que tu pourrais m'expliquer en le commentant, ce serait top smile smile smile

Merciiii

Hors ligne

 

#12 2014-05-13 18:09:06 Re : ordonner un processus aléatoire

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

Re: ordonner un processus aléatoire



Toute la partie propre à geomerative est celle que l'on retrouve dans mes exemples.
On obtient un tableau de points correspondant au contour du chiffre.
Ensuite pour chaque points j'initialise les éléments d'une ArrayList.

C'est la construction de la classe Balle qui est primordiale.
Les variables de la classe :
J'ai fait un tableau des différentes destination de la balle que j'initialise dans le constructeur Balle()
destination[0] est le cercle
destination[1] une place aléatoire
destination[2] est le 4
destination[3] est une autre place aléatoire

position est la position de la balle qui est au départ celle du cercle.
compteurPosition indique quelle est la figure en cours
compteur sert pour le pas de l'animation
état indique si un changement est en cours

J'ai utilise des PVector pour les différentes coordonnées car ils disposent de fonction très avancées :
http://processing.org/reference/PVector.html

Notamment la méthode lerp() :
http://processing.org/reference/PVector_lerp_.html
Qui permet de déterminer un PVector situé sur la ligne formée par les deux autres en fonction d'un indice. Je l'ai utilisé dans la méthode miseAJour().

Pour l'animation, j'utilise la variable compteur qui s'incrément à chaque tour.
A chaque fois que compteur est supérieure à 1 on passe à la destination suivante. Elle s'arrête une fois sur deux c'est dire lorsque qu'il y'a une figure à la fin (cercle ou 4).

Voilà, j'espère avoir été clair.

Ce projet est pour un diplôme ?
Bon courage pour la suite.

Hors ligne

 

#13 2014-05-13 19:36:32 Re : ordonner un processus aléatoire

CRAVEN
nouveau membre
Date d'inscription: 2014-05-13
Messages: 7

Re: ordonner un processus aléatoire



Merci pour tes explications smile !!
Non c'est un projet personnel, mais que j'aimerais quand même documenter au minimum
pour pouvoir ensuite me resservir des codes en les comprenant.
Et du coup dans le premier code que tu m'a envoyé, a quoi corresponde les fonction :

Araylist
Rcommand
Rpoint
Rgroupe
Rfont
...

J'ai compris que c'était des fonctions propre a la bibliothèque, mais a part sa....

Merci pour ton aide, c'est super cool wink

Hors ligne

 

#14 2014-05-13 20:03:26 Re : ordonner un processus aléatoire

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

Re: ordonner un processus aléatoire



Attention, ArrayList est une classe de Processing, c'est une forme de stockage des données dynamiques. Une forme de tableau dont on peut ajouter et enlever de éléments facilement.
http://processing.org/reference/ArrayList.html

Pour les autres objets, réfère toi à la documentation de geomeratoive :
http://www.ricardmarxer.com/geomerative … index.html

Hors ligne

 

#15 2014-05-13 21:13:30 Re : ordonner un processus aléatoire

top
membre
Date d'inscription: 2012-04-12
Messages: 43

Re: ordonner un processus aléatoire



Mushussu a écrit:

Attention, ArrayList est une classe de Processing, c'est une forme de stockage des données dynamiques. Une forme de tableau dont on peut ajouter et enlever de éléments facilement.
http://processing.org/reference/ArrayList.html

Pas tout à fait c'est plutôt une classe Java
http://docs.oracle.com/javase/6/docs/ap … yList.html

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024