Phénomènes visuels - rond dans rond
Revision as of 00:09, 15 November 2017 by Frankiezafe (Talk | contribs) (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...")
// 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: comment modifier le code pour se passer du tableau "points" et conserver exactement le même affichage?
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();
}