PSystem ps; Particle[] FarLeft = new Particle[14]; Particle[] FarRight = new Particle[14]; Particle[] NearLeft = new Particle[14]; Particle[] NearRight = new Particle[14]; Particle Center; float sl; float il; void setup() { size(500,500); ps = (PSystem)loadPlugin("PSystem"); framerate(30); Center = new Particle(0, 0,0); ps.addParticle(Center); il = 2*sqrt(10); for(int i=0; i<14; ++i) { sl = i*20.0; if ((i==0) || (i==2) || (i==4) || (i==6) || (i==8) || (i==10) || (i==12)) { FarLeft[i] = new Particle(-i*sqrt(50)-sqrt(50),sqrt(50),-i*sqrt(50)+sqrt(50)); ps.addParticle(FarLeft[i]); FarRight[i] = new Particle(i*sqrt(50)+sqrt(50),sqrt(50),-i*sqrt(50)+sqrt(50)); ps.addParticle(FarRight[i]); NearLeft[i] = new Particle(-i*sqrt(50)-sqrt(50),sqrt(50),i*sqrt(50)+sqrt(50)); ps.addParticle(NearLeft[i]); NearRight[i] = new Particle(i*sqrt(50)+sqrt(50),sqrt(50),i*sqrt(50)+sqrt(50)); ps.addParticle(NearRight[i]); } else { FarLeft[i] = new Particle(-i*sqrt(50)-sqrt(50),0,-i*sqrt(50)+sqrt(50)); ps.addParticle(FarLeft[i]); FarRight[i] = new Particle(i*sqrt(50)+sqrt(50),0,-i*sqrt(50)+sqrt(50)); ps.addParticle(FarRight[i]); NearLeft[i] = new Particle(-i*sqrt(50)-sqrt(50),0,i*sqrt(50)+sqrt(50)); ps.addParticle(NearLeft[i]); NearRight[i] = new Particle(i*sqrt(50)+sqrt(50),0,i*sqrt(50)+sqrt(50)); ps.addParticle(NearRight[i]); } ps.defaultSpringRestLength = sl; ps.defaultSpringStrength = 2; ps.defaultSpringDamping = 1; ps.addSpring(FarLeft[i],FarRight[i]); ps.addSpring(FarLeft[i],NearLeft[i]); ps.addSpring(NearLeft[i],NearRight[i]); ps.addSpring(NearRight[i],FarRight[i]); ps.defaultSpringRestLength = il; if(i>0) { ps.defaultSpringStrength = 2; ps.addSpring(FarLeft[i],FarLeft[i-1]); ps.addSpring(FarRight[i],FarRight[i-1]); ps.addSpring(NearLeft[i], NearLeft[i-1]); ps.addSpring(NearRight[i],NearRight[i-1]); } if(i>0) { ps.defaultSpringStrength = .5; ps.defaultSpringRestLength = sqrt(sq(sl-10)+100); ps.addSpring(FarLeft[i],FarRight[i-1]); ps.addSpring(FarRight[i],NearRight[i-1]); ps.addSpring(NearRight[i], NearLeft[i-1]); ps.addSpring(NearLeft[i],FarLeft[i-1]); ps.addSpring(FarLeft[i-1],FarRight[i]); ps.addSpring(FarRight[i-1],NearRight[i]); ps.addSpring(NearRight[i-1], NearLeft[i]); ps.addSpring(NearLeft[i-1],FarLeft[i]); } } ps.defaultSpringRestLength = il; ps.addSpring(FarLeft[0],Center); ps.addSpring(FarRight[0],Center); ps.addSpring(NearLeft[0], Center); ps.addSpring(NearRight[0],Center); ps.setGravity(0.0); } void loop() { stroke(200,204,50); background(40,0,50); translate(width/2,height/2); rotateX(mouseX*PI/250.0); rotateY(mouseY*PI/250.0); ps.draw(); if (frame == 1000) { FarLeft[13].fix(); NearRight[13].fix(); FarRight[13].fix(); NearLeft[13].fix(); } }