Reworked terse_vector_t to use (x, y, z) instead of c[3].

The code reads so much easier to use normal (x, y, z) coordinates.
This commit is contained in:
Don Cross
2020-08-17 21:31:04 -04:00
parent 2bfef280fd
commit 0fb4d86691
3 changed files with 116 additions and 118 deletions

View File

@@ -1610,7 +1610,7 @@ static int PlutoStateTable_C(cg_context_t *context, const top_model_t *model)
CHECK(TopPosition(model, tt, &equ));
fprintf(context->outfile,
"%c { %10.1lf, {{%20.16lf, %20.16lf, %20.16lf}}, {{%23.16le, %23.16le, %23.16le}} }\n",
"%c { %10.1lf, {%20.16lf, %20.16lf, %20.16lf}, {%23.16le, %23.16le, %23.16le} }\n",
(i==0 ? ' ' : ','),
tt, equ.x, equ.y, equ.z, equ.vx, equ.vy, equ.vz);
}

View File

@@ -41,7 +41,9 @@ extern "C" {
typedef struct
{
double c[3];
double x;
double y;
double z;
}
terse_vector_t;
@@ -50,49 +52,49 @@ static const terse_vector_t VecZero;
static terse_vector_t VecAdd(terse_vector_t a, terse_vector_t b)
{
terse_vector_t c;
c.c[0] = a.c[0] + b.c[0];
c.c[1] = a.c[1] + b.c[1];
c.c[2] = a.c[2] + b.c[2];
c.x = a.x + b.x;
c.y = a.y + b.y;
c.z = a.z + b.z;
return c;
}
static terse_vector_t VecSub(terse_vector_t a, terse_vector_t b)
{
terse_vector_t c;
c.c[0] = a.c[0] - b.c[0];
c.c[1] = a.c[1] - b.c[1];
c.c[2] = a.c[2] - b.c[2];
c.x = a.x - b.x;
c.y = a.y - b.y;
c.z = a.z - b.z;
return c;
}
static void VecIncr(terse_vector_t *target, terse_vector_t source)
{
target->c[0] += source.c[0];
target->c[1] += source.c[1];
target->c[2] += source.c[2];
target->x += source.x;
target->y += source.y;
target->z += source.z;
}
static void VecDecr(terse_vector_t *target, terse_vector_t source)
{
target->c[0] -= source.c[0];
target->c[1] -= source.c[1];
target->c[2] -= source.c[2];
target->x -= source.x;
target->y -= source.y;
target->z -= source.z;
}
static terse_vector_t VecMul(double s, terse_vector_t v)
{
terse_vector_t p;
p.c[0] = s * v.c[0];
p.c[1] = s * v.c[1];
p.c[2] = s * v.c[2];
p.x = s * v.x;
p.y = s * v.y;
p.z = s * v.z;
return p;
}
static void VecScale(terse_vector_t *target, double scalar)
{
target->c[0] *= scalar;
target->c[1] *= scalar;
target->c[2] *= scalar;
target->x *= scalar;
target->y *= scalar;
target->z *= scalar;
}
static astro_vector_t PublicVec(astro_time_t time, terse_vector_t terse)
@@ -101,9 +103,9 @@ static astro_vector_t PublicVec(astro_time_t time, terse_vector_t terse)
vector.status = ASTRO_SUCCESS;
vector.t = time;
vector.x = terse.c[0];
vector.y = terse.c[1];
vector.z = terse.c[2];
vector.x = terse.x;
vector.y = terse.y;
vector.z = terse.z;
return vector;
}
@@ -1796,9 +1798,9 @@ static terse_vector_t VsopRotate(const double ecl[3])
Z FK5 0.000000000000 +0.397776982902 +0.917482137087 Z VSOP87A
*/
equ.c[0] = ecl[0] + 0.000000440360*ecl[1] - 0.000000190919*ecl[2];
equ.c[1] = -0.000000479966*ecl[0] + 0.917482137087*ecl[1] - 0.397776982902*ecl[2];
equ.c[2] = 0.397776982902*ecl[1] + 0.917482137087*ecl[2];
equ.x = ecl[0] + 0.000000440360*ecl[1] - 0.000000190919*ecl[2];
equ.y = -0.000000479966*ecl[0] + 0.917482137087*ecl[1] - 0.397776982902*ecl[2];
equ.z = 0.397776982902*ecl[1] + 0.917482137087*ecl[2];
return equ;
}
@@ -1835,9 +1837,9 @@ static astro_vector_t CalcVsop(const vsop_model_t *model, astro_time_t time)
/* Package the position as astro_vector_t. */
vector.status = ASTRO_SUCCESS;
vector.t = time;
vector.x = pos.c[0];
vector.y = pos.c[1];
vector.z = pos.c[2];
vector.x = pos.x;
vector.y = pos.y;
vector.z = pos.z;
return vector;
}
@@ -1917,9 +1919,7 @@ static body_state_t CalcVsopPosVel(const vsop_model_t *model, double tt)
state.v = VsopRotate(eclip);
/* Convert speed units from [AU/millennium] to [AU/day]. */
state.v.c[0] /= DAYS_PER_MILLENNIUM;
state.v.c[1] /= DAYS_PER_MILLENNIUM;
state.v.c[2] /= DAYS_PER_MILLENNIUM;
VecScale(&state.v, 1 / DAYS_PER_MILLENNIUM);
return state;
}
@@ -1998,7 +1998,6 @@ typedef struct
$ASTRO_PLUTO_TABLE();
static body_state_t AdjustBarycenterPosVel(body_state_t *ssb, double tt, astro_body_t body, double planet_gm)
{
body_state_t planet;
@@ -2051,16 +2050,16 @@ static void AddAcceleration(terse_vector_t *acc, terse_vector_t small_pos, doubl
{
double dx, dy, dz, r2, pull;
dx = major_pos.c[0] - small_pos.c[0];
dy = major_pos.c[1] - small_pos.c[1];
dz = major_pos.c[2] - small_pos.c[2];
dx = major_pos.x - small_pos.x;
dy = major_pos.y - small_pos.y;
dz = major_pos.z - small_pos.z;
r2 = dx*dx + dy*dy + dz*dz;
pull = gm / (r2 * sqrt(r2));
acc->c[0] += dx * pull;
acc->c[1] += dy * pull;
acc->c[2] += dz * pull;
acc->x += dx * pull;
acc->y += dy * pull;
acc->z += dz * pull;
}

View File

@@ -41,7 +41,9 @@ extern "C" {
typedef struct
{
double c[3];
double x;
double y;
double z;
}
terse_vector_t;
@@ -50,49 +52,49 @@ static const terse_vector_t VecZero;
static terse_vector_t VecAdd(terse_vector_t a, terse_vector_t b)
{
terse_vector_t c;
c.c[0] = a.c[0] + b.c[0];
c.c[1] = a.c[1] + b.c[1];
c.c[2] = a.c[2] + b.c[2];
c.x = a.x + b.x;
c.y = a.y + b.y;
c.z = a.z + b.z;
return c;
}
static terse_vector_t VecSub(terse_vector_t a, terse_vector_t b)
{
terse_vector_t c;
c.c[0] = a.c[0] - b.c[0];
c.c[1] = a.c[1] - b.c[1];
c.c[2] = a.c[2] - b.c[2];
c.x = a.x - b.x;
c.y = a.y - b.y;
c.z = a.z - b.z;
return c;
}
static void VecIncr(terse_vector_t *target, terse_vector_t source)
{
target->c[0] += source.c[0];
target->c[1] += source.c[1];
target->c[2] += source.c[2];
target->x += source.x;
target->y += source.y;
target->z += source.z;
}
static void VecDecr(terse_vector_t *target, terse_vector_t source)
{
target->c[0] -= source.c[0];
target->c[1] -= source.c[1];
target->c[2] -= source.c[2];
target->x -= source.x;
target->y -= source.y;
target->z -= source.z;
}
static terse_vector_t VecMul(double s, terse_vector_t v)
{
terse_vector_t p;
p.c[0] = s * v.c[0];
p.c[1] = s * v.c[1];
p.c[2] = s * v.c[2];
p.x = s * v.x;
p.y = s * v.y;
p.z = s * v.z;
return p;
}
static void VecScale(terse_vector_t *target, double scalar)
{
target->c[0] *= scalar;
target->c[1] *= scalar;
target->c[2] *= scalar;
target->x *= scalar;
target->y *= scalar;
target->z *= scalar;
}
static astro_vector_t PublicVec(astro_time_t time, terse_vector_t terse)
@@ -101,9 +103,9 @@ static astro_vector_t PublicVec(astro_time_t time, terse_vector_t terse)
vector.status = ASTRO_SUCCESS;
vector.t = time;
vector.x = terse.c[0];
vector.y = terse.c[1];
vector.z = terse.c[2];
vector.x = terse.x;
vector.y = terse.y;
vector.z = terse.z;
return vector;
}
@@ -2802,9 +2804,9 @@ static terse_vector_t VsopRotate(const double ecl[3])
Z FK5 0.000000000000 +0.397776982902 +0.917482137087 Z VSOP87A
*/
equ.c[0] = ecl[0] + 0.000000440360*ecl[1] - 0.000000190919*ecl[2];
equ.c[1] = -0.000000479966*ecl[0] + 0.917482137087*ecl[1] - 0.397776982902*ecl[2];
equ.c[2] = 0.397776982902*ecl[1] + 0.917482137087*ecl[2];
equ.x = ecl[0] + 0.000000440360*ecl[1] - 0.000000190919*ecl[2];
equ.y = -0.000000479966*ecl[0] + 0.917482137087*ecl[1] - 0.397776982902*ecl[2];
equ.z = 0.397776982902*ecl[1] + 0.917482137087*ecl[2];
return equ;
}
@@ -2841,9 +2843,9 @@ static astro_vector_t CalcVsop(const vsop_model_t *model, astro_time_t time)
/* Package the position as astro_vector_t. */
vector.status = ASTRO_SUCCESS;
vector.t = time;
vector.x = pos.c[0];
vector.y = pos.c[1];
vector.z = pos.c[2];
vector.x = pos.x;
vector.y = pos.y;
vector.z = pos.z;
return vector;
}
@@ -2923,9 +2925,7 @@ static body_state_t CalcVsopPosVel(const vsop_model_t *model, double tt)
state.v = VsopRotate(eclip);
/* Convert speed units from [AU/millennium] to [AU/day]. */
state.v.c[0] /= DAYS_PER_MILLENNIUM;
state.v.c[1] /= DAYS_PER_MILLENNIUM;
state.v.c[2] /= DAYS_PER_MILLENNIUM;
VecScale(&state.v, 1 / DAYS_PER_MILLENNIUM);
return state;
}
@@ -3004,52 +3004,51 @@ typedef struct
static const body_state_t PlutoStateTable[] =
{
{ -730000.0, {{-26.1182072321075829, -14.3761681778249830, 3.3844025152994774}}, {{ 1.6339372163655529e-03, -2.7861699588507534e-03, -1.3585880229444957e-03}} }
, { -693500.0, {{ 43.6599275018260613, 15.7782921408810637, -8.2269833881374197}}, {{-2.5043046295860396e-04, 2.1163039457238022e-03, 7.3466073583102224e-04}} }
, { -657000.0, {{-17.0086014985032854, 33.0590743876419708, 15.4080189624258548}}, {{-1.9676551946049311e-03, -1.8337707766770380e-03, 2.0125441459958719e-05}} }
, { -620500.0, {{ 26.9005106893170947, -21.5285596810213917, -14.7987712668074689}}, {{ 2.2939261196998199e-03, 1.7431871970058934e-03, -1.4585639832643377e-04}} }
, { -584000.0, {{ 20.2303809506997041, 43.2669666571891156, 7.3829660919233735}}, {{-1.9754081700584848e-03, 5.3457141292226470e-04, 7.5929169129792552e-04}} }
, { -547500.0, {{-22.5571440338751295, -19.2958112538447288, 0.7806423603825809}}, {{ 2.1494578646505005e-03, -2.4266772630044198e-03, -1.4013084013574030e-03}} }
, { -511000.0, {{ 43.0236236810360140, 19.6179542007346654, -6.8406553041565390}}, {{-4.7729923671057766e-04, 2.0208979483877301e-03, 7.7191815992131417e-04}} }
, { -474500.0, {{-20.4245105862934473, 29.5157679318004575, 15.3408675727018000}}, {{-1.8003167284198391e-03, -2.1025226687936670e-03, -1.1262333332858843e-04}} }
, { -438000.0, {{ 30.7746921076872191, -18.2366370153037458, -14.9455358798962816}}, {{ 2.0113162005464535e-03, 1.9353827024189184e-03, -2.0937793168297053e-06}} }
, { -401500.0, {{ 16.7235440456361140, 44.0505598318602907, 8.6886113939439973}}, {{-2.0565226049264105e-03, 3.2710694138777488e-04, 7.2006155046578529e-04}} }
, { -365000.0, {{-18.4891734360057143, -23.1428732331142157, -1.6436720878799393}}, {{ 2.5524223225831953e-03, -2.0035792463878955e-03, -1.3910737531294321e-03}} }
, { -328500.0, {{ 42.0853950560733949, 22.9742531259520106, -5.5131410205411608}}, {{-6.7105845193949449e-04, 1.9177289500464923e-03, 7.9770011059533674e-04}} }
, { -292000.0, {{-23.2753639151192857, 25.8185142987693794, 15.0553815885983209}}, {{-1.6062295460974561e-03, -2.3395961498532914e-03, -2.4377362639479245e-04}} }
, { -255500.0, {{ 33.9015793210130454, -14.9421228983498118, -14.8664994855707153}}, {{ 1.7455105487563175e-03, 2.0655068871493817e-03, 1.1695000657629788e-04}} }
, { -219000.0, {{ 13.3770189322701665, 44.4442211120182549, 9.8260227015846819}}, {{-2.1171882923251405e-03, 1.3114714542921137e-04, 6.7884578840323264e-04}} }
, { -182500.0, {{-14.1723844533378838, -26.0054690135836388, -3.8387026446526260}}, {{ 2.8419751785822194e-03, -1.5579441656564316e-03, -1.3408416711060398e-03}} }
, { -146000.0, {{ 40.9468572586402928, 25.9049735920209017, -4.2563362404987810}}, {{-8.3652705194050571e-04, 1.8129497136404069e-03, 8.1564228273060249e-04}} }
, { -109500.0, {{-25.5839689598009237, 22.0699164999424546, 14.5902026036780406}}, {{-1.3923977856330628e-03, -2.5442249745421868e-03, -3.7169906721828429e-04}} }
, { -73000.0, {{ 36.4035708396755808, -11.7473067389593133, -14.6304139635222619}}, {{ 1.5037714418940607e-03, 2.1500325702247347e-03, 2.1523781242947619e-04}} }
, { -36500.0, {{ 10.2436041239517408, 44.5280986402285350, 10.8048664487065693}}, {{-2.1615839201822632e-03, -5.1418983893534152e-05, 6.3687060751429743e-04}} }
, { 0.0, {{ -9.8753695807739028, -27.9789262247367461, -5.7537118247042978}}, {{ 3.0287533248818345e-03, -1.1276087003635514e-03, -1.2651326732361079e-03}} }
, { 36500.0, {{ 39.7009143866164109, 28.4327664903825230, -3.0906026170880683}}, {{-9.7720559866138271e-04, 1.7121518344796007e-03, 8.2822409843551052e-04}} }
, { 73000.0, {{-27.3620419812795213, 18.4265651225705902, 13.9975343005913544}}, {{-1.1690934621340430e-03, -2.7143131627458072e-03, -4.9312695340366763e-04}} }
, { 109500.0, {{ 38.3556091850032033, -8.7643800131842013, -14.2951819118807286}}, {{ 1.2922798115839052e-03, 2.2032141141126154e-03, 2.9606522103424232e-04}} }
, { 146000.0, {{ 7.3929490279056296, 44.3826789515344231, 11.6295002148543460}}, {{-2.1932815453830153e-03, -2.1751799585363732e-04, 5.9556516201113893e-04}} }
, { 182500.0, {{ -5.8649529029432070, -29.1987619981354349, -7.3502494912123018}}, {{ 3.1339384323665490e-03, -7.4205968379700848e-04, -1.1783357537604210e-03}} }
, { 219000.0, {{ 38.4269476345328584, 30.5667598351631895, -2.0378379641213549}}, {{-1.0958945370083525e-03, 1.6194885149658572e-03, 8.3705272532545749e-04}} }
, { 255500.0, {{-28.6586488201636094, 15.0309000931700982, 13.3365724093667239}}, {{-9.4611899595407856e-04, -2.8506813871559205e-03, -6.0508645822989350e-04}} }
, { 292000.0, {{ 39.8319806717527598, -6.0784057667647184, -13.9098153586561750}}, {{ 1.1117769689167254e-03, 2.2362097830151747e-03, 3.6230548231153126e-04}} }
, { 328500.0, {{ 4.8371523764030018, 44.0723119541530082, 12.3146147867801634}}, {{-2.2164547537724495e-03, -3.6790365636784901e-04, 5.5542723844615902e-04}} }
, { 365000.0, {{ -2.2619763759486737, -29.8581508706765391, -8.6502366418978376}}, {{ 3.1821176368396439e-03, -4.0915169873994336e-04, -1.0895893040651994e-03}} }
, { 401500.0, {{ 37.1576590087419305, 32.3528396259588220, -1.0950381786229393}}, {{-1.1988412606829513e-03, 1.5356290902994688e-03, 8.4339118209852005e-04}} }
, { 438000.0, {{-29.5767402292298733, 11.8635359435865020, 12.6313230398719423}}, {{-7.2292830060955327e-04, -2.9587820140709459e-03, -7.0824296450300425e-04}} }
, { 474500.0, {{ 40.9541099577599113, -3.6589805945369926, -13.4994699563949752}}, {{ 9.5387298337127409e-04, 2.2572135462476943e-03, 4.1826529781127707e-04}} }
, { 511000.0, {{ 2.4859523114116473, 43.6181887566155453, 12.8914184596698913}}, {{-2.2339745420393194e-03, -5.1034757181915515e-04, 5.1485330196244779e-04}} }
, { 547500.0, {{ 1.0594791441638154, -30.1357921778686659, -9.7458684762962609}}, {{ 3.1921591684898362e-03, -1.1305312796150061e-04, -9.9954096945965398e-04}} }
, { 584000.0, {{ 35.8778640130143884, 33.8942263660709031, -0.2245246362768878}}, {{-1.2941245730845226e-03, 1.4560427668318845e-03, 8.4762160640136956e-04}} }
, { 620500.0, {{-30.2026537318922905, 8.7794211940578180, 11.8609238187578043}}, {{-4.9002221381806493e-04, -3.0438768469137345e-03, -8.0605935262762732e-04}} }
, { 657000.0, {{ 41.8536204011375759, -1.3790965838041744, -13.0624345337527110}}, {{ 8.0674627557123521e-04, 2.2702374399790701e-03, 4.6832587475464563e-04}} }
, { 693500.0, {{ 0.2468843977112088, 43.0303960481226611, 13.3909343344166665}}, {{-2.2436121787266041e-03, -6.5238074250728356e-04, 4.7172729553195559e-04}} }
, { 730000.0, {{ 4.2432528370898517, -30.1182016908248045, -10.7074412313490512}}, {{ 3.1725847067411131e-03, 1.6098461202269649e-04, -9.0672150593867700e-04}} }
{ -730000.0, {-26.1182072321075829, -14.3761681778249830, 3.3844025152994774}, { 1.6339372163655529e-03, -2.7861699588507534e-03, -1.3585880229444957e-03} }
, { -693500.0, { 43.6599275018260613, 15.7782921408810637, -8.2269833881374197}, {-2.5043046295860396e-04, 2.1163039457238022e-03, 7.3466073583102224e-04} }
, { -657000.0, {-17.0086014985032854, 33.0590743876419708, 15.4080189624258548}, {-1.9676551946049311e-03, -1.8337707766770380e-03, 2.0125441459958719e-05} }
, { -620500.0, { 26.9005106893170947, -21.5285596810213917, -14.7987712668074689}, { 2.2939261196998199e-03, 1.7431871970058934e-03, -1.4585639832643377e-04} }
, { -584000.0, { 20.2303809506997041, 43.2669666571891156, 7.3829660919233735}, {-1.9754081700584848e-03, 5.3457141292226470e-04, 7.5929169129792552e-04} }
, { -547500.0, {-22.5571440338751295, -19.2958112538447288, 0.7806423603825809}, { 2.1494578646505005e-03, -2.4266772630044198e-03, -1.4013084013574030e-03} }
, { -511000.0, { 43.0236236810360140, 19.6179542007346654, -6.8406553041565390}, {-4.7729923671057766e-04, 2.0208979483877301e-03, 7.7191815992131417e-04} }
, { -474500.0, {-20.4245105862934473, 29.5157679318004575, 15.3408675727018000}, {-1.8003167284198391e-03, -2.1025226687936670e-03, -1.1262333332858843e-04} }
, { -438000.0, { 30.7746921076872191, -18.2366370153037458, -14.9455358798962816}, { 2.0113162005464535e-03, 1.9353827024189184e-03, -2.0937793168297053e-06} }
, { -401500.0, { 16.7235440456361140, 44.0505598318602907, 8.6886113939439973}, {-2.0565226049264105e-03, 3.2710694138777488e-04, 7.2006155046578529e-04} }
, { -365000.0, {-18.4891734360057143, -23.1428732331142157, -1.6436720878799393}, { 2.5524223225831953e-03, -2.0035792463878955e-03, -1.3910737531294321e-03} }
, { -328500.0, { 42.0853950560733949, 22.9742531259520106, -5.5131410205411608}, {-6.7105845193949449e-04, 1.9177289500464923e-03, 7.9770011059533674e-04} }
, { -292000.0, {-23.2753639151192857, 25.8185142987693794, 15.0553815885983209}, {-1.6062295460974561e-03, -2.3395961498532914e-03, -2.4377362639479245e-04} }
, { -255500.0, { 33.9015793210130454, -14.9421228983498118, -14.8664994855707153}, { 1.7455105487563175e-03, 2.0655068871493817e-03, 1.1695000657629788e-04} }
, { -219000.0, { 13.3770189322701665, 44.4442211120182549, 9.8260227015846819}, {-2.1171882923251405e-03, 1.3114714542921137e-04, 6.7884578840323264e-04} }
, { -182500.0, {-14.1723844533378838, -26.0054690135836388, -3.8387026446526260}, { 2.8419751785822194e-03, -1.5579441656564316e-03, -1.3408416711060398e-03} }
, { -146000.0, { 40.9468572586402928, 25.9049735920209017, -4.2563362404987810}, {-8.3652705194050571e-04, 1.8129497136404069e-03, 8.1564228273060249e-04} }
, { -109500.0, {-25.5839689598009237, 22.0699164999424546, 14.5902026036780406}, {-1.3923977856330628e-03, -2.5442249745421868e-03, -3.7169906721828429e-04} }
, { -73000.0, { 36.4035708396755808, -11.7473067389593133, -14.6304139635222619}, { 1.5037714418940607e-03, 2.1500325702247347e-03, 2.1523781242947619e-04} }
, { -36500.0, { 10.2436041239517408, 44.5280986402285350, 10.8048664487065693}, {-2.1615839201822632e-03, -5.1418983893534152e-05, 6.3687060751429743e-04} }
, { 0.0, { -9.8753695807739028, -27.9789262247367461, -5.7537118247042978}, { 3.0287533248818345e-03, -1.1276087003635514e-03, -1.2651326732361079e-03} }
, { 36500.0, { 39.7009143866164109, 28.4327664903825230, -3.0906026170880683}, {-9.7720559866138271e-04, 1.7121518344796007e-03, 8.2822409843551052e-04} }
, { 73000.0, {-27.3620419812795213, 18.4265651225705902, 13.9975343005913544}, {-1.1690934621340430e-03, -2.7143131627458072e-03, -4.9312695340366763e-04} }
, { 109500.0, { 38.3556091850032033, -8.7643800131842013, -14.2951819118807286}, { 1.2922798115839052e-03, 2.2032141141126154e-03, 2.9606522103424232e-04} }
, { 146000.0, { 7.3929490279056296, 44.3826789515344231, 11.6295002148543460}, {-2.1932815453830153e-03, -2.1751799585363732e-04, 5.9556516201113893e-04} }
, { 182500.0, { -5.8649529029432070, -29.1987619981354349, -7.3502494912123018}, { 3.1339384323665490e-03, -7.4205968379700848e-04, -1.1783357537604210e-03} }
, { 219000.0, { 38.4269476345328584, 30.5667598351631895, -2.0378379641213549}, {-1.0958945370083525e-03, 1.6194885149658572e-03, 8.3705272532545749e-04} }
, { 255500.0, {-28.6586488201636094, 15.0309000931700982, 13.3365724093667239}, {-9.4611899595407856e-04, -2.8506813871559205e-03, -6.0508645822989350e-04} }
, { 292000.0, { 39.8319806717527598, -6.0784057667647184, -13.9098153586561750}, { 1.1117769689167254e-03, 2.2362097830151747e-03, 3.6230548231153126e-04} }
, { 328500.0, { 4.8371523764030018, 44.0723119541530082, 12.3146147867801634}, {-2.2164547537724495e-03, -3.6790365636784901e-04, 5.5542723844615902e-04} }
, { 365000.0, { -2.2619763759486737, -29.8581508706765391, -8.6502366418978376}, { 3.1821176368396439e-03, -4.0915169873994336e-04, -1.0895893040651994e-03} }
, { 401500.0, { 37.1576590087419305, 32.3528396259588220, -1.0950381786229393}, {-1.1988412606829513e-03, 1.5356290902994688e-03, 8.4339118209852005e-04} }
, { 438000.0, {-29.5767402292298733, 11.8635359435865020, 12.6313230398719423}, {-7.2292830060955327e-04, -2.9587820140709459e-03, -7.0824296450300425e-04} }
, { 474500.0, { 40.9541099577599113, -3.6589805945369926, -13.4994699563949752}, { 9.5387298337127409e-04, 2.2572135462476943e-03, 4.1826529781127707e-04} }
, { 511000.0, { 2.4859523114116473, 43.6181887566155453, 12.8914184596698913}, {-2.2339745420393194e-03, -5.1034757181915515e-04, 5.1485330196244779e-04} }
, { 547500.0, { 1.0594791441638154, -30.1357921778686659, -9.7458684762962609}, { 3.1921591684898362e-03, -1.1305312796150061e-04, -9.9954096945965398e-04} }
, { 584000.0, { 35.8778640130143884, 33.8942263660709031, -0.2245246362768878}, {-1.2941245730845226e-03, 1.4560427668318845e-03, 8.4762160640136956e-04} }
, { 620500.0, {-30.2026537318922905, 8.7794211940578180, 11.8609238187578043}, {-4.9002221381806493e-04, -3.0438768469137345e-03, -8.0605935262762732e-04} }
, { 657000.0, { 41.8536204011375759, -1.3790965838041744, -13.0624345337527110}, { 8.0674627557123521e-04, 2.2702374399790701e-03, 4.6832587475464563e-04} }
, { 693500.0, { 0.2468843977112088, 43.0303960481226611, 13.3909343344166665}, {-2.2436121787266041e-03, -6.5238074250728356e-04, 4.7172729553195559e-04} }
, { 730000.0, { 4.2432528370898517, -30.1182016908248045, -10.7074412313490512}, { 3.1725847067411131e-03, 1.6098461202269649e-04, -9.0672150593867700e-04} }
};
static const int PLUTO_NUM_STATES = 41;
static body_state_t AdjustBarycenterPosVel(body_state_t *ssb, double tt, astro_body_t body, double planet_gm)
{
body_state_t planet;
@@ -3102,16 +3101,16 @@ static void AddAcceleration(terse_vector_t *acc, terse_vector_t small_pos, doubl
{
double dx, dy, dz, r2, pull;
dx = major_pos.c[0] - small_pos.c[0];
dy = major_pos.c[1] - small_pos.c[1];
dz = major_pos.c[2] - small_pos.c[2];
dx = major_pos.x - small_pos.x;
dy = major_pos.y - small_pos.y;
dz = major_pos.z - small_pos.z;
r2 = dx*dx + dy*dy + dz*dz;
pull = gm / (r2 * sqrt(r2));
acc->c[0] += dx * pull;
acc->c[1] += dy * pull;
acc->c[2] += dz * pull;
acc->x += dx * pull;
acc->y += dy * pull;
acc->z += dz * pull;
}