// All Examples Written by Casey Reas and Ben Fry // unless otherwise stated. float baseX1, baseY1, baseX2, baseY2; float baseLength; float[] xCoords, yCoords; float ellipseX, ellipseY, ellipseRadius = 6; float directionX, directionY; float ellipseSpeed = 3.5; float velocityX, velocityY; void setup(){ size(200, 200); frameRate(30); fill(128); smooth(); baseX1 = 0; baseY1 = height-150; baseX2 = width; baseY2 = height; // start ellipse at middle top of screen ellipseX = width/2; // calculate initial random direction directionX = random(0.1, 0.99); directionY = random(0.1, 0.99); // normalize direction vector float directionVectLength = sqrt(directionX*directionX + directionY*directionY); directionX /= directionVectLength; directionY /= directionVectLength; } void draw(){ // draw background fill(0, 12); noStroke(); rect(0, 0, width, height); // calculate length of base top baseLength = dist(baseX1, baseY1, baseX2, baseY2); xCoords = new float[ceil(baseLength)]; yCoords = new float[ceil(baseLength)]; // fill base top coordinate array for (int i=0; i width-ellipseRadius){ ellipseX = width-ellipseRadius; directionX *= -1; } // left if (ellipseX < ellipseRadius){ ellipseX = ellipseRadius; directionX *= -1; } // top if (ellipseY < ellipseRadius){ ellipseY = ellipseRadius; directionY *= -1; // randomize base top baseY1 = random(height-100, height); baseY2 = random(height-100, height); } }