Gravity away
by awesomespaceman
HTML
<section id="controls-wrapper" style = "border:2px solid black;">
<label>Mass of Added Planet(in solar masses)</label>
<li><input type="text" name="field" class="textbox" id = "addedMasses"/>
<label>Name of Added Planet</label>
<li><input type="text" name="field" class="textbox" id = "addedNames"/>
</li>
<li><input type="text" name="field" class="textbox" id = "addedColors"/>
</li>
<button id="reset-button">Reset</button>
</section>
<canvas id="canvas" style = "border:2px solid black;"></canvas>
JavaScript
const colors = ["red", "#ff5500", "orange", "#ffdd00", "yellow", "chartreuse", "lime", "#00ff55", "cyan", "azure", "blue", "indigo", "purple", "violet"]
const addedColors = document.getElementById("addedColors")
var addedmasses = document.getElementById("addedMasses")
var addedNames = document.getElementById("addedNames")
class nBodyProblem {
constructor(params) {
this.g = params.g;
this.dt = params.dt;
this.softeningConstant = params.softeningConstant;
this.masses = params.masses;
}
updatePositionVectors() {
const massesLen = this.masses.length;
for (let i = 0; i < massesLen; i++) {
const massI = this.masses[i];
massI.x += massI.vx * this.dt;
massI.y += massI.vy * this.dt;
massI.z += massI.vz * this.dt;
}
return this;
}
updateVelocityVectors() {
const massesLen = this.masses.length;
for (let i = 0; i < massesLen; i++) {
const massI = this.masses[i];
massI.vx += massI.ax * this.dt;
massI.vy += massI.ay * this.dt;
massI.vz += massI.az * this.dt;
}
}
updateAccelerationVectors() {
const massesLen = this.masses.length;
for (let i = 0; i < massesLen; i++) {
let ax = 0;
let ay = 0;
let az = 0;
const massI = this.masses[i];
for (let j = 0; j < massesLen; j++) {
if (i !== j) {
const massJ = this.masses[j];
const dx = massJ.x - massI.x;
const dy = massJ.y - massI.y;
const dz = massJ.z - massI.z;
const distSq = dx * dx + dy * dy + dz * dz;
const f =
(this.g * massJ.m) /
(distSq * Math.sqrt(distSq + this.softeningConstant));
ax += dx * f;
ay += dy * f;
az += dz * f;
}
}
massI.ax = ax;
massI.ay = ay;
massI.az = az;
}
...