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