Jump to: navigation, search

Difference between revisions of "Phénomènes visuels - rond dans rond"

(Created page with " // dans le code ci-dessous, le tableau "points" n'est pas nécessaire: on pourrait très bien s'en passer puisqu'il varie à chaque frame et ne sert qu'à stocker le résu...")
 
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
    // dans le code ci-dessous, le tableau "points" n'est pas nécessaire: on pourrait très bien s'en passer puisqu'il varie à chaque frame et ne sert qu'à stocker le résultat des opérations
+
[[File:Phénomènes visuels - rond dans rond.png|400px]]
    // je l'ai laissé parce qu'il permet de comprendre la différence entre calcul (computation, processing) et affichage (render, display) > le résultat d'un calcul n'est pas nécessairement lié à un affichage
+
    // petit exercice pour vous: comment modifier le code pour se passer du tableau "points" et conserver exactement le même affichage?
+
  
 +
// dans le code ci-dessous, le tableau "points" n'est pas nécessaire: on pourrait très bien s'en passer puisqu'il varie à chaque frame et ne sert qu'à stocker le résultat des opérations
 +
// je l'ai laissé parce qu'il permet de comprendre la différence entre calcul (computation, processing) et affichage (render, display) > le résultat d'un calcul n'est pas nécessairement lié à un affichage
 +
// petit exercice pour vous:
 +
// A. Comment modifier le code pour se passer du tableau "points" et conserver exactement le même affichage?
 +
// B. Comment générer des spirales? Une seule modification est nécessaire.
 +
// C. Adapter le code pour que les couleurs des cercles se succèdent dans l'ordre chromatique? Voir [http://www.hobbitsandhobos.com/wp-content/uploads/2011/06/colorWheel.png color wheel]
 +
 
     static final int count = 17;
 
     static final int count = 17;
 
+
 
     PVector[] points;
 
     PVector[] points;
 
     PVector[] orientations;
 
     PVector[] orientations;
Line 10: Line 15:
 
     int[] colors;
 
     int[] colors;
 
     float rotor;
 
     float rotor;
 
+
 
     void setup() {
 
     void setup() {
 
+
 
       size( 600, 600 );
 
       size( 600, 600 );
 
       stroke(255,100);
 
       stroke(255,100);
 
       fill(255);
 
       fill(255);
 
+
 
       points = new PVector[count];
 
       points = new PVector[count];
 
       orientations = new PVector[count];
 
       orientations = new PVector[count];
Line 31: Line 36:
 
       colorMode(RGB);
 
       colorMode(RGB);
 
       rotor = 1;
 
       rotor = 1;
 
+
 
     }
 
     }
 
+
 
     void draw() {
 
     void draw() {
 
+
 
       background(0);
 
       background(0);
 
+
 
       rotor += 0.01;
 
       rotor += 0.01;
 
+
 
       pushMatrix();
 
       pushMatrix();
 
       translate( width * 0.5, height * 0.5 );
 
       translate( width * 0.5, height * 0.5 );
 
+
 
       float scale = width * 0.4;
 
       float scale = width * 0.4;
 
       float circle = width * 0.02;
 
       float circle = width * 0.02;
 
+
 
       fill( 255 );
 
       fill( 255 );
 
       ellipse(
 
       ellipse(
Line 52: Line 57:
 
           circle * 0.5, circle * 0.5
 
           circle * 0.5, circle * 0.5
 
         );
 
         );
 
+
 
       for( int i = 0; i < count; ++i ) {
 
       for( int i = 0; i < count; ++i ) {
 
         line(
 
         line(
Line 61: Line 66:
 
         );
 
         );
 
       }
 
       }
 
+
 
       for( int i = 0; i < count; ++i ) {
 
       for( int i = 0; i < count; ++i ) {
 
         float c = cos( rotor + angles[i] );
 
         float c = cos( rotor + angles[i] );
Line 75: Line 80:
 
           );
 
           );
 
       }
 
       }
 
+
 
       popMatrix();
 
       popMatrix();
 
+
 
     }
 
     }
  
Line 84: Line 89:
 
[[category:geometry]]
 
[[category:geometry]]
 
[[category:code snippet]]
 
[[category:code snippet]]
 +
[[category:Fiche programmation]]

Latest revision as of 13:03, 15 November 2017

Phénomènes visuels - rond dans rond.png

// dans le code ci-dessous, le tableau "points" n'est pas nécessaire: on pourrait très bien s'en passer puisqu'il varie à chaque frame et ne sert qu'à stocker le résultat des opérations
// je l'ai laissé parce qu'il permet de comprendre la différence entre calcul (computation, processing) et affichage (render, display) > le résultat d'un calcul n'est pas nécessairement lié à un affichage
// petit exercice pour vous: 
// A. Comment modifier le code pour se passer du tableau "points" et conserver exactement le même affichage?
// B. Comment générer des spirales? Une seule modification est nécessaire.
// C. Adapter le code pour que les couleurs des cercles se succèdent dans l'ordre chromatique? Voir color wheel

   static final int count = 17;

   PVector[] points;
   PVector[] orientations;
   float[] angles;
   int[] colors;
   float rotor;

   void setup() {

     size( 600, 600 );
     stroke(255,100);
     fill(255);

     points = new PVector[count];
     orientations = new PVector[count];
     angles = new float[count];
     colors = new int[count];
     colorMode(HSB, 1, 1, 1);
     for( int i = 0; i < count; ++i ) {
       float a = i * PI / (count * 0.5);
       points[i] = new PVector();
       orientations[i] = new PVector( cos(a), sin(a) );
       angles[i] = a;
       colors[i] = color( i * 1.f / count, 1, 1 );
     }
     colorMode(RGB);
     rotor = 1;

   }

   void draw() {

     background(0);

     rotor += 0.01;

     pushMatrix();
     translate( width * 0.5, height * 0.5 );

     float scale = width * 0.4;
     float circle = width * 0.02;

     fill( 255 );
     ellipse(
         cos(rotor) * scale * 0.5,
         sin(rotor) * scale * 0.5,
         circle * 0.5, circle * 0.5
       );

     for( int i = 0; i < count; ++i ) {
       line(
         -orientations[i].x * scale,
         -orientations[i].y * scale,
         orientations[i].x * scale,
         orientations[i].y * scale
       );
     }

     for( int i = 0; i < count; ++i ) {
       float c = cos( rotor + angles[i] );
       points[i].set(
         c * orientations[i].x * scale,
         -c * orientations[i].y * scale
         );
       fill(colors[i]);
       ellipse(
         points[i].x, 
         points[i].y, 
         circle, circle
         );
     }

     popMatrix();

   }