class Fpoint { Fpoint(){ x = y = 0; } float x,y; } class Pea { float pr,pt,pz; float vr,vt,vz; float r; int holeId; Pea (int i){ holeId = i; pr = random(0.1, 0.9); pt = random(TWO_PI); pz = random(-ZZ, ZZ); vr = 0; vt = 0.075; vz = 0; } void update(){ pr += vr; pt += vt; pz += vz; } void render (float rx, float ry){ float sx = 0.5 * holeSizes[holeId].x; float sy = 0.5 * holeSizes[holeId].y; float px = sx * pr * cos(pt); float py = sy * pr * sin(pt); pushMatrix(); translate(px,py,pz); rotateY(0-ry); rotateX(0-rx); fill(0.0, 0.35, 0.2); ellipse(0,0, 7,7); fill(0.0, 0.5, 0.4); ellipse(0.5,-0.5, 5,5); fill(0.0, 0.7, 0.5); ellipse(1,-1, 3,3); fill(0.0, 0.8, 0.7); ellipse(1,-1, 1.5,1.5); popMatrix(); } } PFont myFont; Pea peas[]; int nPeas; Fpoint paths[][]; Fpoint mainCentroid; Fpoint holeCentroids[]; Fpoint holeSizes[]; int nPaths; int pathLengths[]; boolean loadedData = false; float mx, my; float pmx, pmy; float ZZ = 50; float vang = 0; //=========================================================================== void setup(){ size(320,240, P3D); colorMode(RGB, 1.0); myFont = loadFont("BellCentennial-SubCaption-16.vlw"); textFont(myFont, 16); loadPathData(); computePathCentroids(); makePeasThackeray(); } //=========================================================================== void makePeasThackeray(){ nPeas = 50; peas = new Pea[nPeas]; for (int i=0; i50.0){ float dvang = vang/100000.0; for (int i=0; i h0R) h0R = px; if (py < h0T) h0T = py; if (py > h0B) h0B = py; } else if (i==3) { if (px < h1L) h1L = px; if (px > h1R) h1R = px; if (py < h1T) h1T = py; if (py > h1B) h1B = py; } } } holeSizes[0].x = h0R - h0L; holeSizes[0].y = h0B - h0T; holeSizes[1].x = h1R - h1L; holeSizes[1].y = h1B - h1T; }