int numSystems = 40; PSystem[] ps = new PSystem[numSystems]; float theta, theta2 = 0.0f; float r; float amplitude; float x, y,z; float inx, iny, inz; PVector centerLoc; float rotx,roty; int bounds = 1000; float jx,jy,jz; float jxSpeed, jySpeed, jzSpeed, jxRot,jyRot,jzRot; int zoom; void setup() { size(640, 480, P3D); colorMode(HSB, 360, 100, 100, 100); inx = 0; iny = 0; centerLoc = new PVector(width/2, height/2, 0); for(int i=0; i= 0; i--) { jParticle prt = (jParticle) particles.get(i); prt.run(); // ps_loc.z = inz+i*10; prt.move(new PVector(ps_loc.x,ps_loc.y,ps_loc.z)); } //ellipse(ps_loc.x,ps_loc.y, 10, 10); } void update() { th += 0.0025f; ps_loc.x = inx + r * cos(th); ps_loc.y = iny + r * sin(th); ps_loc.z = inz - r/2; ps_loc.x += random(-30.0f, 30.0f); ps_loc.y += random(-30.0f, 30.0f); // ps_loc.z += random(-30.0f, 30.0f); } } class jParticle { PVector loc; PVector vel; PVector acc; float ms; float counter; float lengthVar; jParticle(PVector a, PVector v, PVector l, float ms_, float counter_) { acc = a; vel = v; loc = l; ms = ms_; counter = counter_; lengthVar = random (30); } void run() { update(); render(); // print (counter); } void update() { vel.add(acc); loc.add(vel); acc = new PVector(); } void render() { noStroke(); fill(257, 28, 65, 10); float tenticleSize = ms/30 + 1; strokeWeight(tenticleSize); // ellipse(loc.x,loc.y, ms/8, ms/8); stroke(238, 14, 85, 30); point(loc.x,loc.y,loc.z-ms*4); float al = map(vel.mag(), 0, 1.2, .1, 3); stroke(238, 14, 85, al); // stroke(238, 14, 85, 100); //print(counter%5 + " "); // if(ms >= 69.5) noFill(); strokeWeight(1.5); if(ms <= 5) { bezier(inx,iny,inz+70, loc.x - (inx-loc.x)/20,loc.y - (iny-loc.y)/20,inz+60,loc.x - (inx-loc.x)/3,loc.y - (iny-loc.y)/3,inz-10,loc.x,loc.y,loc.z + lengthVar); bezier(loc.x + (inx-loc.x)/1.5,loc.y + (iny-loc.y)/1.5,inz+20, loc.x - (inx-loc.x)/40,loc.y - (iny-loc.y)/40,inz+40,loc.x - (inx-loc.x)/3,loc.y - (iny-loc.y)/3,inz-10,loc.x,loc.y,loc.z + lengthVar); } } void move(PVector target) { acc.add(steer(target)); } PVector getLocation() { return loc; } PVector steer(PVector target) { PVector steer; PVector desired = PVector.sub(target,loc); float d = desired.mag(); desired.normalize(); desired.mult(3.5f); steer = PVector.sub(desired,vel); steer.limit(3.0f); steer.div(ms); return steer; } }