25. November 2010
A simple rotation permutation with several circles touching each other at their tangents and rotating (through the given 2. parameter). There are 3 different versions of the parameter:int anzahl = 7; int rand = 50; float xStep; float yStep; int[] permutationsIndexList = {0, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 5, 2, 3, 4, 5, 6, 5, 4, 3, 4, 5, 6, 5, 4, 3, 4, 5, 6, 5, 4, 3, 2, 5, 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 0}; void setup() { size(600, 600); smooth(); xStep = (width - 2 * rand) / (float)(anzahl-1); yStep = (height - 2 * rand) / (float)(anzahl-1); noLoop(); } void draw() { background(255); noStroke(); int permutationsIndex = 0; pushMatrix(); translate(rand,rand); for(int y=0; y<anzahl;y++) { pushMatrix(); for(int x=0; x<anzahl;x++) { //2. parameter: rotation in radiant (3 possible versions) /*-----------------------------------------------------*/ //float param2 = 2*(x+y)*PI/(anzahl*1.0); //float param2 = 2*(x)*PI/(anzahl*1.0); float param2 = 2*(y)*PI/(anzahl*1.0); drawPermutationObj(permutationsIndexList[permutationsIndex], param2); print(str(permutationsIndexList[permutationsIndex]) + "\t"); ++permutationsIndex; translate(xStep,0.0f); } println(); popMatrix(); translate(0.0f,yStep); } popMatrix(); } void drawPermutationObj(int type, float angle) { float d = 75; //diameter float r = d/2; //radius pushStyle(); switch(type) { case 0: fill(255); stroke(0); //just to make a border for the very first one.. ellipse(0,0,d,d); fill(0); noStroke(); //..then deactivate it //calculate the radius at each angle using cosinus & sinus ellipse(((r-5) * cos(angle)), ((r-5) * sin(angle)),10,10); ellipse(((r-5) * cos(angle-PI)), ((r-5) * sin(angle-PI)),10,10); fill(255); ellipse(((r-7) * cos(angle-PI)), ((r-7) * sin(angle-PI)),6,6); break; case 1: fill(0); ellipse(0,0,d,d); fill(255); ellipse(((r-10) * cos(angle)), ((r-10) * sin(angle)),20,20); ellipse(((r-35) * cos(angle-PI)), ((r-35) * sin(angle-PI)),70,70); fill(0); ellipse(((r-10) * cos(angle-PI)), ((r-10) * sin(angle-PI)),20,20); ellipse(((r-8) * cos(angle)), ((r-8) * sin(angle)),16,16); fill(255); ellipse(((r-14) * cos(angle-PI)), ((r-14) * sin(angle-PI)),14,14); break; case 2: fill(0); ellipse(0,0,d,d); fill(255); ellipse(((r-15) * cos(angle)), ((r-15) * sin(angle)),30,30); ellipse(((r-30) * cos(angle-PI)), ((r-30) * sin(angle-PI)),60,60); fill(0); ellipse(((r-15) * cos(angle-PI)), ((r-15) * sin(angle-PI)),30,30); ellipse(((r-12) * cos(angle)), ((r-12) * sin(angle)),24,24); fill(255); ellipse(((r-20) * cos(angle-PI)), ((r-20) * sin(angle-PI)),20,20); break; case 3: fill(0); ellipse(0,0,d,d); fill(255); ellipse(((r-20) * cos(angle)), ((r-20) * sin(angle)),40,40); ellipse(((r-25) * cos(angle-PI)), ((r-25) * sin(angle-PI)),50,50); fill(0); ellipse(((r-20) * cos(angle-PI)), ((r-20) * sin(angle-PI)),40,40); ellipse(((r-17) * cos(angle)), ((r-17) * sin(angle)),34,34); fill(255); ellipse(((r-30) * cos(angle-PI)), ((r-30) * sin(angle-PI)),30,30); break; case 4: fill(0); ellipse(0,0,d,d); fill(255); ellipse(((r-25) * cos(angle)), ((r-25) * sin(angle)),50,50); ellipse(((r-20) * cos(angle-PI)), ((r-20) * sin(angle-PI)),40,40); fill(0); ellipse(((r-25) * cos(angle-PI)), ((r-25) * sin(angle-PI)),50,50); ellipse(((r-21) * cos(angle)), ((r-21) * sin(angle)),42,42); fill(255); ellipse(((r-38) * cos(angle-PI)), ((r-38) * sin(angle-PI)),38,38); break; case 5: fill(0); ellipse(0,0,d,d); fill(255); ellipse(((r-30) * cos(angle)), ((r-30) * sin(angle)),60,60); ellipse(((r-15) * cos(angle-PI)), ((r-15) * sin(angle-PI)),30,30); fill(0); ellipse(((r-30) * cos(angle-PI)), ((r-30) * sin(angle-PI)),60,60); ellipse(((r-20) * cos(angle)), ((r-20) * sin(angle)),40,40); fill(255); ellipse(((r-48) * cos(angle-PI)), ((r-48) * sin(angle-PI)),48,48); break; case 6: fill(0); ellipse(0,0,d,d); fill(255); ellipse(((r-35) * cos(angle)), ((r-35) * sin(angle)),70,70); ellipse(((r-10) * cos(angle-PI)), ((r-10) * sin(angle-PI)),20,20); fill(0); ellipse(((r-35) * cos(angle-PI)), ((r-35) * sin(angle-PI)),70,70); ellipse(((r-19) * cos(angle)), ((r-19) * sin(angle)),38,38); fill(255); ellipse(((r-56) * cos(angle-PI)), ((r-56) * sin(angle-PI)),56,56); break; default: break; } popStyle(); } void keyPressed() { switch(key) { case ' ': save("permutation.jpg"); break; } }