Beispiel #1
0
 internal bool IsEqual(Pair *pairArray, int count)
 {
     if (count != Count)
     {
         return(false);
     }
     for (int i = 0; i < Count; ++i)
     {
         var  hashA = GetHash(i);
         bool found = false;
         for (int j = 0; j < Count; ++j)
         {
             var hashB = pairArray[i].Hash;
             if (hashA == hashB)
             {
                 found = true;
                 break;
             }
         }
         if (!found)
         {
             return(false);
         }
     }
     return(true);
 }
 public abstract void Pair_PairPtr(Pair *self, uint _key, void *_val_p);
 public abstract void Pair_PairFloat(Pair *self, uint _key, float _val_f);
 public abstract void Pair_PairInt(Pair *self, uint _key, int _val_i);
Beispiel #5
0
    public static void Initialize()
    {
        bodies = (Body *)(U8.Base);
        pairs  = (Pair *)(&bodies[BodyCount]);

        InitBody(
            0, // Sun
            mass: Solarmass
            );

        InitBody(
            1, // Jupiter
            x:    4.84143144246472090e+00,
            y:   -1.16032004402742839e+00,
            z:   -1.03622044471123109e-01,
            vx:   1.66007664274403694e-03 * DaysPeryear,
            vy:   7.69901118419740425e-03 * DaysPeryear,
            vz:  -6.90460016972063023e-05 * DaysPeryear,
            mass: 9.54791938424326609e-04 * Solarmass
            );

        InitBody(
            2, // Saturn
            x:    8.34336671824457987e+00,
            y:    4.12479856412430479e+00,
            z:   -4.03523417114321381e-01,
            vx:  -2.76742510726862411e-03 * DaysPeryear,
            vy:   4.99852801234917238e-03 * DaysPeryear,
            vz:   2.30417297573763929e-05 * DaysPeryear,
            mass: 2.85885980666130812e-04 * Solarmass
            );

        InitBody(
            3, // Uranus
            x:    1.28943695621391310e+01,
            y:   -1.51111514016986312e+01,
            z:   -2.23307578892655734e-01,
            vx:   2.96460137564761618e-03 * DaysPeryear,
            vy:   2.37847173959480950e-03 * DaysPeryear,
            vz:  -2.96589568540237556e-05 * DaysPeryear,
            mass: 4.36624404335156298e-05 * Solarmass
            );

        InitBody(
            4, // Neptune
            x:    1.53796971148509165e+01,
            y:   -2.59193146099879641e+01,
            z:    1.79258772950371181e-01,
            vx:   2.68067772490389322e-03 * DaysPeryear,
            vy:   1.62824170038242295e-03 * DaysPeryear,
            vz:  -9.51592254519715870e-05 * DaysPeryear,
            mass: 5.15138902046611451e-05 * Solarmass
            );

        int pi = 0;

        for (int i = 0; i < BodyCount - 1; i++)
        {
            for (int j = i + 1; j < BodyCount; j++)
            {
                var p = &pairs[pi++];
                p->bi = &bodies[i];
                p->bj = &bodies[j];
            }
        }

        double px = 0.0, py = 0.0, pz = 0.0;

        for (int i = 0; i < BodyCount; i++)
        {
            var b = &(bodies[i]);
            px += b->vx * b->mass;
            py += b->vy * b->mass;
            pz += b->vz * b->mass;
        }

        var sol = &bodies[0];

        sol->vx = -px / Solarmass;
        sol->vy = -py / Solarmass;
        sol->vz = -pz / Solarmass;
    }
Beispiel #6
0
    public static void Initialize () {
        bodies = (Body*)(U8.Base);
        pairs  = (Pair*)(&bodies[BodyCount]);

        InitBody(
            0, // Sun
            mass: Solarmass
        );

        InitBody(
            1, // Jupiter
            x:    4.84143144246472090e+00,
            y:   -1.16032004402742839e+00,
            z:   -1.03622044471123109e-01,
            vx:   1.66007664274403694e-03 * DaysPeryear,
            vy:   7.69901118419740425e-03 * DaysPeryear,
            vz:  -6.90460016972063023e-05 * DaysPeryear,
            mass: 9.54791938424326609e-04 * Solarmass
        );

        InitBody(
            2, // Saturn
            x:    8.34336671824457987e+00,
            y:    4.12479856412430479e+00,
            z:   -4.03523417114321381e-01,
            vx:  -2.76742510726862411e-03 * DaysPeryear,
            vy:   4.99852801234917238e-03 * DaysPeryear,
            vz:   2.30417297573763929e-05 * DaysPeryear,
            mass: 2.85885980666130812e-04 * Solarmass
        );

        InitBody(
            3, // Uranus
            x:    1.28943695621391310e+01,
            y:   -1.51111514016986312e+01,
            z:   -2.23307578892655734e-01,
            vx:   2.96460137564761618e-03 * DaysPeryear,
            vy:   2.37847173959480950e-03 * DaysPeryear,
            vz:  -2.96589568540237556e-05 * DaysPeryear,
            mass: 4.36624404335156298e-05 * Solarmass
        );

        InitBody(
            4, // Neptune
            x:    1.53796971148509165e+01,
            y:   -2.59193146099879641e+01,
            z:    1.79258772950371181e-01,
            vx:   2.68067772490389322e-03 * DaysPeryear,
            vy:   1.62824170038242295e-03 * DaysPeryear,
            vz:  -9.51592254519715870e-05 * DaysPeryear,
            mass: 5.15138902046611451e-05 * Solarmass
        );

        int pi = 0;
        for (int i = 0; i < BodyCount - 1; i++) {
            for (int j = i + 1; j < BodyCount; j++) {
                var p = &pairs[pi++];
                p->bi = &bodies[i];
                p->bj = &bodies[j];
            }
        }

        double px = 0.0, py = 0.0, pz = 0.0;
        for (int i = 0; i < BodyCount; i++) {
            var b = &(bodies[i]);
            px += b->vx * b->mass; 
            py += b->vy * b->mass; 
            pz += b->vz * b->mass;
        }

        var sol = &bodies[0];
        sol->vx = -px / Solarmass; 
        sol->vy = -py / Solarmass; 
        sol->vz = -pz / Solarmass;
    }