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;
      }
  
    ...