// Gravitational Painting 1 John Clavin - June 15, 2016 var system_1; var system_2; var nLines = 30; function setup() { createCanvas(1080, 540); background(245); system_1 = new System(); system_2 = new System(); for (var i = 0; i < nLines; i++) { var m = new Mover(); system_1.addMover(m) } for (var j = 0; j < nLines; j++) { system_1.assignMoverFriend(j, int(random(nLines))); } for (var k = 0; k < nLines; k++) { m = new Mover(); system_2.addMover(m) } for (var l = 0; l < nLines; l++) { system_2.assignMoverFriend(l, int(random(nLines))); } } function draw() { translate(25, 0); system_1.runSystem(); translate(555, 0); system_2.runSystem(); if (frameCount > 500) { noLoop(); } } var System = function() { this.movers = []; this.addMover = function(m) { this.movers.push(m); } this.assignMoverFriend = function(n, f) { this.movers[n].friend = f; } this.runSystem = function() { for (var i = 0; i < this.movers.length; i++) { var mFriend = this.movers[i].friend; var force = this.movers[i].calculateAttraction(this.movers[mFriend]); force.mult(1.8); this.movers[i].applyForce(force); this.movers[i].update(); this.movers[i].display(); } } } var Mover = function() { this.color = color(random(220), random(220), random(220), 116); if (random(100) < 50) { this.x = random(width/2 - 40); this.y = 0; } else { this.x = random(width/2 - 40); this.y = height; } this.pos = createVector(this.x, this.y); this.vel = createVector(0, 0); this.acc = createVector(0, 0); this.friend = 0; this.calculateAttraction = function(p) { var force = p5.Vector.sub(p.pos, this.pos); force.normalize(); return force; } this.applyForce = function(force) { this.acc.add(force); } this.update = function() { this.vel.add(this.acc); this.pos.add(this.vel); this.acc.mult(0); this.vel.mult(0); } this.display = function() { strokeWeight(3); stroke(this.color); point(this.pos.x, this.pos.y); } }