import processing.opengl.*; /* * * draw circles inside one another, offset * * by pixelpusher * http://pixelist.info * pixelpusher@pixelist.com * March 22, 2008 */ int numCircles = 6; int ctr = 0; // counter var float angleIncrement = 5f*PI/180f; // converted to radians float distanceIncrement = 10f; // pixels float circleDiameterFactor; int MAX_DIAMETER; // pixels int MIN_DIAMETER; // pixels static int FRAMERATE = 40; void setup() { size(320, 240, OPENGL); background (0); smooth(); colorMode(HSB, 1.0); ellipseMode(CENTER); rectMode(CORNER); frameRate(FRAMERATE); //noLoop(); MAX_DIAMETER = (width < height ? width : height) -20; // pixels MIN_DIAMETER = round(distanceIncrement)*3; // pixels } void draw() { fill(0f, 0f, 0f, 0.2f); rect(0,0, width, height); stroke(1f); noFill(); translate(width/2, height/2); rotateZ( TWO_PI * (frameCount % (FRAMERATE*20)) / (FRAMERATE*20-1) ); int circleDiameter, circleX, circleY; for (ctr=0; ctr < numCircles; ctr++) { // start with largest circle (centered), then move rightwards in direction of angle circleX = round(distanceIncrement*ctr*cos(angleIncrement*ctr)); circleY = round(distanceIncrement*ctr*sin(angleIncrement*ctr)); circleDiameter = calcDiameter(ctr); //println(ctr + ") " + circleDiameter); ellipse(circleX, circleY, circleDiameter, circleDiameter); // x,y, width, height } } int calcDiameter(int circleIndex) { // index counts from 0 return (MAX_DIAMETER - MIN_DIAMETER) * (numCircles - 1 - circleIndex) / (numCircles-1) + MIN_DIAMETER; }