Phénomènes visuels - rond dans rond
Revision as of 13:03, 15 November 2017 by Frankiezafe (Talk | contribs)
// 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(); }