int N = 6; // number of chords float speedown = 30; float Angles[] = new float[N]; void setup(){ size(200,200); background( 255); frameRate(25); smooth(); } void draw() { state( makeL()); /* Save frames for gif animation */ // if( (float)frameCount < 1 + TWO_PI * speedown) { // saveFrame( "gifani/fr-####.png"); // } else { // exit(); // } } float makeL(){ return map( pow( sin( (float)frameCount/speedown), 3), -1, 1., .05, .380); } void state( float L) { /* Virtual circle has a Diameter == 1 Chords length is always less that 1 Fill in the Array of angles, starting at 0 Each angle determines a joint. */ float a = 0; // current Angle for( int i=0; i<N; i++){ a += 2*asin(L * fibo(i)); Angles[i] = a; } plot(); } void plot(){ // draws that stuff on a particular circle sized to nicely fit the canvas PVector Curr, Prev; float a; background(255, 0); pushMatrix(); translate( width/2, height/2); stroke(230); noFill(); strokeWeight(1); float D = .9*min(width, height); ellipse( 0, 0, D, D); line(-D/2, 0, D/2, 0); line(0, -D/2, 0, D/2); stroke(30,30,50); strokeWeight(2); Prev = new PVector(0,0); for( int i=0; i<N; i++){ a = Angles[i]; Curr = new PVector( .5*D*cos( a), -.5*D*sin( a) ); if( i>0) line( Curr.x, Curr.y, Prev.x, Prev.y); Prev = Curr; } /* And now the joints circles */ fill(255); strokeWeight(1); for( int i=0; i<N; i++){ a = Angles[i]; Curr = new PVector( .5*D*cos( a), -.5*D*sin( a) ); ellipse( Curr.x, Curr.y, 6, 6); } popMatrix(); } int fibo( int M){ // return Fibonacci number: 0,1,1,2,3,5,8.. Next is a sum o two previous. int Prev=0, Curr=1, Next=1; if( M<=0) return 0; if( M==1) return 1; for( int i=1; i<M; i++) { Next = Curr + Prev; Prev = Curr; Curr = Next; } return Next; }

Test to understand the geometry of chords succession, having lengths proportional to Fibonacci numbers: 1,1,2,3,5,8,13,21.. — next is a sum of two previous.

Was looking for a way to make the sequence onf N chords to exactly close the loop, but couldn't solve the math equations yet : )

Cube of sin(x) is used to animate chords lengths adjustment.