« Projet tango » : différence entre les versions

De Wikilipo
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 115 : Ligne 115 :
     }
     }
   }
   }
}
</pre>
==brouillon==
Ce sketch montre comment obtenir des effets avec lesquels nous avions joué lors de la première réunion processing:
<pre>
String [] mots = {"bonjour","au revoir","merci"};
int index;
void setup()
{
  size(400, 400);
  colorMode(RGB, 1.0);
  noStroke();
  PFont myFont = createFont("FFScala", 32);
  textFont(myFont);
}
void draw()
{
  background(0);
  fill(0.0, 100, 100);
 
  //plus on s'approche de "l'horizon", plus les mots changent vite
  float distToCenter = abs(mouseY - width/2.0)/width;
  int refreshPeriod = max(1,(int)(50 * distToCenter));
  if(frameCount % refreshPeriod== 0){
    index = (int)random(mots.length);
  }
  String mot = mots[index];
 
  //rotation du mot sur lui-même
  translate(mouseX,mouseY);
  rotate(TWO_PI*(frameCount%200/200.0));
  text(mot,-textWidth(mot)/2, 8);
}
}



Version du 2 mars 2010 à 00:23

Voici une page où mettre les sketches processing sur lesquels nous travaillons:

Cercles par Andreas

ArrayList lastValues = new ArrayList();
int nbCircles = 40;
int diameterIncrement = 20;

void setup() {
  size(400, 400);
  smooth(); 
  noStroke();
  //framerate(60);
  while(lastValues.size()<nbCircles*2){
    lastValues.add(new int[]{0,0});
  }
}

void draw() {
  background(0);
  lastValues.remove(0);
  lastValues.add(new int[]{mouseX,mouseY});
  
  drawCirles(nbCircles, lastValues, diameterIncrement);
}

void drawCirles(int nb,java.util.List lastValues,int diameterIncrement){
  int firstValue = lastValues.size() -1 - (nb-1) * 2;
  int largestDiameter = 40 + diameterIncrement *nb;
  for(int i = 0; i<nb; i++){
    int fillColor = (i%2==0) ? 255 : 0;
    fill(fillColor, fillColor, fillColor);

    int [] xy = (int[])lastValues.get(firstValue + i*2);
    int diameter = largestDiameter - diameterIncrement * i;
    ellipse(xy[0], xy[1], diameter, diameter);
  }
}

Mots_objet, par Ambroise

Ce script n'est pas encore propre. Il s'agit de créer une class d'objets txt, avec un constructeur txt() et une méthode, ecrire(). Ça ne fonctionne pas encore correctement, mais c'est une esquisse pour traiter les mots qui sont tracés sur le fond comme des objets à part entière, qui peuvent donc avoir des comportements variés, indépendamment les uns des autres. Merci de faire vos corrections.

// initialisation du tableau mots contenant des objets de type txt
txt[] mots = new txt[0];
String[] dico = {"tango","salsa","electro"};
PFont myFont = createFont("Monospaced.italic", 30);

void setup() 
{
  size(400, 400);
  background(0.0);
  colorMode(RGB, 1.0);
  noStroke();
  
  textFont(myFont);
  fill(#FF0000);

}

void draw() 
{
  // creer un nouveau mot chaque 1.5 secondes
  if (frameCount % 90 == 0) {
    mots = (txt[]) append(mots, new txt());
  }
  // tracer tous les mots du tableau mots
  // il y a un problème à l'exécution, outofmemory après une quinzaine d'objets créés
  for (int a=0;a<mots.length;a++) {
    mots[a].ecrire();
  }
}

// la classe txt, avec son constructeur txt() qui choisit un mot aléatoirement dans dico
// et une methode ecrire() qui place ce mot à la position de la souris:

class txt {
  int x=mouseX; int y=mouseY;
  int i = int(random(dico.length));
  void ecrire() {
    text(dico[i],x,y);
  }
}

J'ai pas pu m'empêcher de faire une version sans la classe txt, qui ne sert pas encore à grand chose. La classe txt commencera à être utile si on se décide à représenter les mots différemment selon le temps, par exemple si on veut les faire vibrer ou disparaitre.

//version simplifiée du sketch précédent
String[] dico = {"tango","salsa","electro"};

void setup() 
{
  size(400, 400);
  background(0.0);
  colorMode(RGB, 1.0);

  textFont(createFont("Monospaced.italic", 30));
  fill(#FF0000);

}

void draw() 
{
  // creer un nouveau mot chaque 1.5 secondes
  if (frameCount % 90 == 0) {
    int index = int(random(dico.length));
    for(int i=0; i<10;i++){
      //pour répliquer l'effet du sketch original il faut écrire plusieurs fois le même mot
      //au même endroit. Il y a surement une meilleure manière d
      text(dico[index],mouseX,mouseY);
    }
  }
}

brouillon

Ce sketch montre comment obtenir des effets avec lesquels nous avions joué lors de la première réunion processing:

String [] mots = {"bonjour","au revoir","merci"};
int index;

void setup() 
{
  size(400, 400);
  colorMode(RGB, 1.0);
  noStroke();
  PFont myFont = createFont("FFScala", 32);
  textFont(myFont);
}

void draw() 
{
  background(0);
  fill(0.0, 100, 100); 
  
  //plus on s'approche de "l'horizon", plus les mots changent vite
  float distToCenter = abs(mouseY - width/2.0)/width;
  int refreshPeriod = max(1,(int)(50 * distToCenter));
  if(frameCount % refreshPeriod== 0){
    index = (int)random(mots.length);
  }
  String mot = mots[index];
  
  //rotation du mot sur lui-même
  translate(mouseX,mouseY);
  rotate(TWO_PI*(frameCount%200/200.0));
  text(mot,-textWidth(mot)/2, 8); 
}