1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: C code, restricted three body

  1. Mar 7, 2007 #1
    1. The problem statement, all variables and given/known data

    http://www2.warwick.ac.uk/fac/sci/physics/teach/module_home/px270/projects/c4s_projects07.pdf [Broken]

    it's the first example

    2. Relevant equations
    see above

    3. The attempt at a solution

    right i shouldn't have any probs with the programming but i need to understand the calcs that are put on the site..

    as i understand i'm suppose to the first eqn to find a,, then usign the second eqn to find rn+1.. this is done in components so for x and y..

    but i tried it for a third mass that is at x=0 and y=positive integer(both the stationary massses are of equal magnitude).. what should happen is that it should be attracted and just go towards negative integers but I get acceleration in x direction.. ((note the printf function are just there for me to see some stuff))..

    could someone maybe see where i've gone wrong and maybe give me som pointers:

    here is the code:

    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>

    main(int argc, char* argv[])
    float x[101], y[101], mneg, mnegm, mpos, rpnx, rpny, rppx, rppy, ax[101], ay[101], xzero, yzero, vxzero, vyzero, dt;
    int n;
    FILE *output;

    output = fopen("data.dat", "w");

    sscanf(argv[1], "%f", &mneg);
    sscanf(argv[2], "%f", &mpos);
    sscanf(argv[3], "%f", &xzero);
    sscanf(argv[4], "%f", &yzero);
    sscanf(argv[5], "%f", &vxzero);
    sscanf(argv[6], "%f", &vyzero);

    dt = 0.005;
    x[0] = xzero;
    y[0] = yzero;
    x[1] = xzero + vxzero*dt;
    y[1] =yzero + vyzero*dt;
    rpnx= -1;
    rpny= 0;
    rppx= 1;
    rppy= 0;
    printf("%f %f\n", x[1], y[1]);

    for(n=1; n < 100; ++n)

    fprintf(output, "%f %f\n", x[n+1],y[n+1]);

    printf("%f %f", ax[1], ay[1]);


    edit: note that the first mass is inputted as a "negative mass" for the equation to work..
    also a wird problem if setting inital velocities to zero then the third mass doesn't move at ll which it should
    Last edited by a moderator: May 2, 2017
  2. jcsd
  3. Mar 7, 2007 #2
    Nothing appears when I open the web page...
  4. Mar 8, 2007 #3


    User Avatar
    Science Advisor
    Homework Helper

    The attachment worked for me though it was a bit slow to open.

    You seem to have misunderstood equation (1) in the attachment. The |r+r_p|^3 and |r-r_p|^3 terms are not vectors. |r+r_p| is the scalar length of the vector r+r_p.
    Last edited: Mar 8, 2007
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook