/* * * Define Dancing * ----------------- * particle art * * * Erin K - November 4th 2008 * RobotGrrl.com * * */ import traer.physics.*; Particle mouse, b, c, d, e, f, g, h, i; ParticleSystem physics; void setup() { size(800, 600); frameRate(24); smooth(); ellipseMode( CENTER ); noStroke(); noCursor(); physics = new ParticleSystem(0.1, 0.1); mouse = physics.makeParticle(); mouse.makeFixed(); b = physics.makeParticle(1.0, (width/2)-10, (height/2)+10, 0); c = physics.makeParticle(1.0, (width/2), (height/2)+10, 0); d = physics.makeParticle(1.0, random(0, width), random(0, height), 0); e = physics.makeParticle(1.0, random(0, width), random(0, height), 0); f = physics.makeParticle(1.0, random(0, width), random(0, height), 0); g = physics.makeParticle(1.0, random(0, width), random(0, height), 0); h = physics.makeParticle(1.0, random(0, width), random(0, height), 0); i = physics.makeParticle(1.0, random(0, width), random(0, height), 0); physics.makeAttraction(mouse, b, 50000, 100); physics.makeAttraction(mouse, c, 50000, 100); physics.makeAttraction(mouse, d, 50000, 100); physics.makeAttraction(mouse, e, 50000, 100); physics.makeAttraction(mouse, f, 50000, 100); physics.makeAttraction(mouse, g, 50000, 100); physics.makeAttraction(mouse, h, 50000, 100); physics.makeAttraction(mouse, i, 50000, 100); physics.makeAttraction(b, c, 10000, 10); physics.makeAttraction(b, d, -10000, 10); physics.makeAttraction(b, e, 10000, 10); physics.makeAttraction(b, f, -10000, 10); physics.makeAttraction(b, g, 10000, 10); physics.makeAttraction(b, h, -10000, 10); physics.makeAttraction(b, i, 10000, 10); physics.makeAttraction(c, d, 1000, 15); physics.makeAttraction(c, e, -1000, 15); physics.makeAttraction(c, f, 1000, 15); physics.makeAttraction(c, g, -1000, 15); physics.makeAttraction(c, h, 1000, 15); physics.makeAttraction(c, i, -1000, 15); physics.makeAttraction(d, e, -5000, 5); physics.makeAttraction(d, f, 5000, 5); physics.makeAttraction(d, g, -5000, 5); physics.makeAttraction(d, h, 5000, 5); physics.makeAttraction(d, i, -5000, 5); physics.makeAttraction(e, f, -10000, 10); physics.makeAttraction(e, g, -10000, 10); physics.makeAttraction(e, h, -10000, 10); physics.makeAttraction(e, i, -10000, 10); physics.makeAttraction(f, g, 10000, 20); physics.makeAttraction(f, h, 10000, 20); physics.makeAttraction(f, i, 10000, 20); physics.makeAttraction(g, h, -10000, 10); physics.makeAttraction(g, i, -10000, 10); physics.makeAttraction(h, i, 10000, 10); colorMode(HSB, 100); } void draw() { mouse.moveTo(mouseX, mouseY, 0); handleBoundaryCollisions(b); handleBoundaryCollisions(c); handleBoundaryCollisions(d); handleBoundaryCollisions(e); handleBoundaryCollisions(f); handleBoundaryCollisions(g); handleBoundaryCollisions(h); handleBoundaryCollisions(i); physics.tick(); fill(color(90, 100, 100, 100)); ellipse(mouse.position().x(), mouse.position().y(), 35, 25); fill(color(80, 100, 100, 100)); ellipse(b.position().x(), b.position().y(), 35, 25); fill(color(70, 100, 100, 100)); ellipse(c.position().x(), c.position().y(), 35, 25); fill(color(60, 100, 100, 100)); ellipse(d.position().x(), d.position().y(), 35, 25); fill(color(40, 99, 99, 100)); ellipse(e.position().x(), e.position().y(), 35, 25); fill(color(30, 99, 99, 100)); ellipse(f.position().x(), f.position().y(), 35, 25); fill(color(20, 99, 99, 100)); ellipse(g.position().x(), g.position().y(), 35, 25); fill(color(10, 99, 99, 100)); ellipse(h.position().x(), h.position().y(), 35, 25); fill(color(5, 99, 99, 100)); ellipse(i.position().x(), i.position().y(), 35, 25); fill(color(0,0,0,25)); rect(0, 0, width, height); } void handleBoundaryCollisions( Particle p ) { if ( p.position().x() < 0 || p.position().x() > width ) { p.setVelocity( -0.9*p.velocity().x(), p.velocity().y(), 0 ); } if ( p.position().y() < 0 || p.position().y() > height ) { p.setVelocity( p.velocity().x(), -0.9*p.velocity().y(), 0 ); } p.moveTo( constrain( p.position().x(), 0, width ), constrain( p.position().y(), 0, height ), 0 ); }