Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I wrote this code in Eclipse to solve the NBody physics equation however there i

ID: 3686606 • Letter: I

Question

I wrote this code in Eclipse to solve the NBody physics equation however there is an unresolved error. In this line "double Fnet = G*mass*mass/(dist*dist);" eclipse underlines G*mass in red and gives me the message "The operator * is undefined for the argument type(s) double, double[]." How do I resolve this issue? The full code is included below.

public class NBody {

public static final String PLANETS_FILE = "planets.txt";

// animation pause (in miliseconds)

public static final int DELAY = 20;

// music (2001 theme)

public static final String MUSIC = "2001theme.wav";

// background image

public static final String BACKGROUND = "starfield.jpg";

// gravitational constant (N m^2 / kg^2)

public static final double G = 6.67e-11;

// parameters from command line

public static double T; // simulate from time 0 to T (s)

public static double dt; // time quantum (s)

// parameters from first two lines

public static int N; // number of bodies

public static double R; // radius of universe

public static double[] rx; // x position (m)

public static double[] ry; // y position (m)

public static double[] vx; // x velocity (m/s)

public static double[] vy; // y velocity (m/s)

public static double[] mass; // mass (kg)

public static String[] image; // name of gif

// TODO: read the planet file, new the parallel arrays, and load

// their values from the file.

public static void loadPlanets(String planetFileName) {

   java.util.Scanner input = new java.util.Scanner(System.in);

  

int N = input.nextInt();

double R = input.nextDouble();

double[] rx = new double[N];

double[] ry = new double[N];

double[] vx = new double[N];

double[] vy = new double[N];

double[] mass = new double[N];

String[] image= new String[N];

for (int i = 0; i < N; i++) {

  

rx[i] = input.nextDouble();

ry[i] = input.nextDouble();

vx[i] = input.nextDouble();

vy[i] = input.nextDouble();

mass[i] = input.nextDouble();

image[i] = "./images/" + input.next();

}

  

}

  

  

public static void runSimulation() {

// run numerical simulation from 0 to T

for (double t = 0.0; t < T; t += dt) {

// the x- and y-components of force

double[] fx = new double[N];

double[] fy = new double[N];

// calculate forces on each object

for (int i = 0; i < N; i++) {

  

// reset forces to zero

fx[i] = 0.0;

fy[i] = 0.0;

  

for (int j = 0; j < N; j++) {

if (i != j) {

double dx = rx[j] - rx[i];

double dy = ry[j] - ry[i];

double dist = Math.sqrt(dx*dx + dy*dy);

double Fnet = G*mass*mass/(dist*dist);

fx[i] += Fnet * dx / dist;

fy[i] += Fnet * dy / dist;

}

}

}

//calculate acceleration, velocities and positions

double ax = 0.0;

double ay = 0.0;

for (int i = 0; i < N; i++) {

ax = fx[i] / mass[i];

ay = fy[i] / mass[i];

vx[i] += dt * ax;

vy[i] += dt * ay;

rx[i] += dt * vx[i];

ry[i] += dt * vy[i];

  

  

// draw background and then planets

StdDraw.picture(0, 0, BACKGROUND);

StdDraw.picture(rx[i], ry[i], image[i]);

  

//loop to plot the N bodies

  

// pause for a short while, using "animation mode"

StdDraw.show(DELAY);

}

}

}

public static void main(String[] args) {

// TODO: read T and dt from command line.

T = 0;

// load planets from file specified in the command line

String planetFileName = "planets.txt";

loadPlanets(planetFileName);

// rescale coordinates that we can use natural x- and y-coordinates

StdDraw.setXscale(-R, +R);

StdDraw.setYscale(-R, +R);

StdAudio.play( MUSIC );

// turn on animation mode

StdDraw.show(0);

// Run simulation

runSimulation();

// print final state of universe to standard output

System.out.printf("%d ", N);

System.out.printf("%.2e ", R);

for (int i = 0; i < N; i++) {

System.out.printf("%11.4e %11.4e %11.4e %11.4e %11.4e %12s ",

rx[i], ry[i], vx[i], vy[i], mass[i], image[i]);

}

}

}

Explanation / Answer

Hi I have fixed your issue.

public class NBody {

   public static final String PLANETS_FILE = "planets.txt";

   // animation pause (in miliseconds)

   public static final int DELAY = 20;

   // music (2001 theme)

   public static final String MUSIC = "2001theme.wav";

   // background image

   public static final String BACKGROUND = "starfield.jpg";

   // gravitational constant (N m^2 / kg^2)

   public static final double G = 6.67e-11;

   // parameters from command line

   public static double T; // simulate from time 0 to T (s)

   public static double dt; // time quantum (s)

   // parameters from first two lines

   public static int N; // number of bodies

   public static double R; // radius of universe

   public static double[] rx; // x position (m)

   public static double[] ry; // y position (m)

   public static double[] vx; // x velocity (m/s)

   public static double[] vy; // y velocity (m/s)

   public static double[] mass; // mass (kg)

   public static String[] image; // name of gif

   // TODO: read the planet file, new the parallel arrays, and load

   // their values from the file.

   public static void loadPlanets(String planetFileName) {

       java.util.Scanner input = new java.util.Scanner(System.in);

       int N = input.nextInt();

       double R = input.nextDouble();

       double[] rx = new double[N];

       double[] ry = new double[N];

       double[] vx = new double[N];

       double[] vy = new double[N];

       double[] mass = new double[N];

       String[] image = new String[N];

       for (int i = 0; i < N; i++) {

           rx[i] = input.nextDouble();

           ry[i] = input.nextDouble();

           vx[i] = input.nextDouble();

           vy[i] = input.nextDouble();

           mass[i] = input.nextDouble();

           image[i] = "./images/" + input.next();

       }

   }

   public static void runSimulation() {

       // run numerical simulation from 0 to T

       for (double t = 0.0; t < T; t += dt) {

           // the x- and y-components of force

           double[] fx = new double[N];

           double[] fy = new double[N];

           // calculate forces on each object

           for (int i = 0; i < N; i++) {

               // reset forces to zero

               fx[i] = 0.0;

               fy[i] = 0.0;

               for (int j = 0; j < N; j++) {

                   if (i != j) {

                       double dx = rx[j] - rx[i];

                       double dy = ry[j] - ry[i];

                       double dist = Math.sqrt(dx * dx + dy * dy);

                       double Fnet = G * mass[i] * mass[i] / (dist * dist);

                       fx[i] += Fnet * dx / dist;

                       fy[i] += Fnet * dy / dist;

                   }

               }

           }

           // calculate acceleration, velocities and positions

           double ax = 0.0;

           double ay = 0.0;

           for (int i = 0; i < N; i++) {

               ax = fx[i] / mass[i];

               ay = fy[i] / mass[i];

               vx[i] += dt * ax;

               vy[i] += dt * ay;

               rx[i] += dt * vx[i];

               ry[i] += dt * vy[i];

               // draw background and then planets

               StdDraw.picture(0, 0, BACKGROUND);

               StdDraw.picture(rx[i], ry[i], image[i]);

               // loop to plot the N bodies

               // pause for a short while, using "animation mode"

               StdDraw.show(DELAY);

           }

       }

   }

   public static void main(String[] args) {

       // TODO: read T and dt from command line.

       T = 0;

       // load planets from file specified in the command line

       String planetFileName = "planets.txt";

       loadPlanets(planetFileName);

       // rescale coordinates that we can use natural x- and y-coordinates

       StdDraw.setXscale(-R, +R);

       StdDraw.setYscale(-R, +R);

       StdAudio.play(MUSIC);

       // turn on animation mode

       StdDraw.show(0);

       // Run simulation

       runSimulation();

       // print final state of universe to standard output

       System.out.printf("%d ", N);

       System.out.printf("%.2e ", R);

       for (int i = 0; i < N; i++) {

           System.out.printf("%11.4e %11.4e %11.4e %11.4e %11.4e %12s ",

           rx[i], ry[i], vx[i], vy[i], mass[i], image[i]);

       }

   }

}