class Ball{ constructor(x, y, r, c){ this.maxAcc = 0.5; this.r = r; this.pos = createVector(x, y); this.vel = createVector(0, 0); this.acc = createVector(0, 0); this.c = c; } attracted(){ let att = createVector(0, 0), G = 50, g = 3; for (let a of attractions){ let distV = p5.Vector.sub(a.pos, this.pos); distV.setMag(G * this.r * a.r / pow(this.pos.dist(a.pos), 2)); att.add(distV.div(this.r)); } if (gravity) att.y += g; this.acc = att; this.acc.limit(this.maxAcc); } move(){ this.vel.add(this.acc); this.pos.add(this.vel); } show(){ noStroke(); fill(this.c); ellipse(this.pos.x, this.pos.y, this.r * 2); } debugInformation(){ let velX = p5.Vector.mult(this.vel, 10).x; let velY = p5.Vector.mult(this.vel, 10).y; let accX = velX + p5.Vector.mult(this.acc, 100).x; let accY = velY + p5.Vector.mult(this.acc, 100).y; push(); translate(this.pos.x, this.pos.y); strokeWeight(2); stroke(255, 0, 0); fill(255, 0, 0); line(0, 0, velX, velY); translate(velX, velY); rotate(this.vel.heading()); beginShape(); vertex(0, 0); vertex(-10, 10); vertex(-10, -10); endShape(); rotate(-this.vel.heading()); translate(-velX, -velY); stroke(0, 255, 0); fill(0, 255, 0); line(velX, velY, accX, accY); translate(accX, accY); rotate(this.acc.heading()); beginShape(); vertex(0, 0); vertex(-10, 10); vertex(-10, -10); endShape(); rotate(-this.acc.heading()); translate(-accX, -accY); pop(); } }