📄 stjupsat.pas
字号:
+ 0.00032 * sin(W2 - W3)
+ 0.00032 * sin(2*(L3 - AnomJup - LongPerJ))
+ 0.00029 * sin(Pi1 - Pi3);
S3 := 0.16477 * sin(L3 - Pi3)
+ 0.09062 * sin(L3 - Pi4)
- 0.06907 * sin(L2 - L3)
+ 0.03786 * sin(Pi3 - Pi4)
+ 0.01844 * sin(2*(L3-L4))
- 0.01340 * sin(AnomJup)
+ 0.00703 * sin(L2 - 2*L3 + Pi3)
- 0.00670 * sin(2*(NodeJup - LongPerJ))
- 0.00540 * sin(L3-L4)
+ 0.00481 * sin(Pi1 + Pi3 -2*LongPerJ - 2*AnomJup)
- 0.00409 * sin(L2 - 2*L3 + Pi2)
+ 0.00379 * sin(L2 - 2*L3 + Pi4)
+ 0.00235 * sin(NodeJup - W3)
+ 0.00198 * sin(NodeJup - W4)
+ 0.00180 * sin(PhiLambda)
+ 0.00129 * sin(3*(L3-L4))
+ 0.00124 * sin(L1-L3)
- 0.00119 * sin(5*AnomSat - 2*AnomJup + 52.225/radcor)
+ 0.00109 * sin(L1-L2)
- 0.00099 * sin(3*L3 - 7*L4 + 4*Pi4)
+ 0.00091 * sin(W3 - W4)
+ 0.00081 * sin(3*L3 - 7*L4 + Pi3 + 3*Pi4)
- 0.00076 * sin(2*L2 - 3*L3 + Pi3)
+ 0.00069 * sin(Pi4 - LongPerJ)
- 0.00058 * sin(2*L3 - 3*L4 + Pi4)
+ 0.00057 * sin(L3 + Pi3 - 2*LongPerJ - 2*AnomJup)
- 0.00057 * sin(L3 - 2*L4 + Pi4)
- 0.00052 * sin(Pi2 - Pi3)
- 0.00052 * sin(L2 - 2*L3 + Pi1)
+ 0.00048 * sin(L3 - 2*L4 + Pi3)
- 0.00045 * sin(2*L2 - 3*L3 + Pi4)
- 0.00041 * sin(Pi2 - Pi4)
- 0.00038 * sin(2*AnomJup)
- 0.00033 * sin(Pi3 - Pi4 + W3 - W4)
- 0.00032 * sin(3*L3 - 7*L4 + 2*Pi3 + 2*Pi4)
+ 0.00030 * sin(4*(L3-L4))
- 0.00029 * sin(W3 + NodeJup - 2*LongPerJ - 2*AnomJup)
+ 0.00029 * sin(L3 + Pi4 - 2*LongPerJ - 2*AnomJup)
+ 0.00026 * sin(L3 - LongPerJ - AnomJup)
+ 0.00024 * sin(L2 - 3*L3 + 2*L4)
+ 0.00021 * sin(2*(L3 - LongPerJ - AnomJup))
- 0.00021 * sin(L3 - Pi2)
+ 0.00017 * sin(2*(L3 - Pi3));
S4 := 0.84109 * sin(L4 - Pi4)
+ 0.03429 * sin(Pi4 - Pi3)
- 0.03305 * sin(2*(NodeJup - LongPerJ))
- 0.03211 * sin(AnomJup)
- 0.01860 * sin(L4 - Pi3)
+ 0.01182 * sin(NodeJup - W4)
+ 0.00622 * sin(L4 + Pi4 - 2*AnomJup - 2*LongPerJ)
+ 0.00385 * sin(2*(L4 - Pi4))
- 0.00284 * sin(5*AnomSat - 2*AnomJup + 52.225/radcor)
- 0.00233 * sin(2*(NodeJup - Pi4))
- 0.00223 * sin(L3 - L4)
- 0.00208 * sin(L4 - LongPerJ)
+ 0.00177 * sin(NodeJup + W4 - 2*Pi4)
+ 0.00134 * sin(Pi4 - LongPerJ)
+ 0.00125 * sin(2*(L4 - AnomJup - LongPerJ))
- 0.00117 * sin(2*AnomJup)
- 0.00112 * sin(2*(L3 - L4))
+ 0.00106 * sin(3*L3 - 7*L4 + 4*Pi4)
+ 0.00102 * sin(L4 - AnomJup - LongPerJ)
+ 0.00096 * sin(2*L4 - NodeJup - W4)
+ 0.00087 * sin(2*(NodeJup - W4))
- 0.00087 * sin(3*L3 - 7*L4 + Pi3 + 3*Pi4)
+ 0.00085 * sin(L3 - 2*L4 + Pi4)
- 0.00081 * sin(2*(L4 - NodeJup))
+ 0.00071 * sin(L4 + Pi4 -2*LongPerJ - 3*AnomJup)
+ 0.00060 * sin(L1 - L4)
- 0.00056 * sin(NodeJup - W3)
- 0.00055 * sin(L3 - 2*L4 + Pi3)
+ 0.00051 * sin(L2 - L4)
+ 0.00042 * sin(2*(NodeJup - AnomJup - LongPerJ))
+ 0.00039 * sin(2*(Pi4 - W4))
+ 0.00036 * sin(NodeJup + LongPerJ - Pi4 - W4)
+ 0.00035 * sin(2*AnomSat - AnomJup + 188.37/radcor)
- 0.00035 * sin(L4 - Pi4 + 2*LongPerJ - 2*NodeJup)
- 0.00032 * sin(L4 + Pi4 - 2*LongPerJ - AnomJup)
+ 0.00030 * sin(3*L3 - 7*L4 + 2*Pi3 + 2*Pi4)
+ 0.00030 * sin(2*AnomSat - 2*AnomJup + 149.15/radcor)
+ 0.00028 * sin(L4 - Pi4 + 2*NodeJup - 2*LongPerJ)
- 0.00028 * sin(2*(L4 - W4))
- 0.00027 * sin(Pi3 - Pi4 + W3 - W4)
- 0.00026 * sin(5*AnomSat - 3*AnomJup + 188.37/radcor)
+ 0.00025 * sin(W4 - W3)
- 0.00025 * sin(L2 - 3*L3 + 2*L4)
- 0.00023 * sin(3*(L3 - L4))
+ 0.00021 * sin(2*L4 - 2*LongPerJ - 3*AnomJup)
- 0.00021 * sin(2*L3 - 3*L4 + Pi4)
+ 0.00019 * sin(L4 - Pi4 - AnomJup)
- 0.00019 * sin(2*L4 - Pi3 - Pi4)
- 0.00018 * sin(L4 - Pi4 + AnomJup)
- 0.00016 * sin(L4 + Pi3 -2*LongPerJ - 2*AnomJup);
S1 := S1/radcor;
S2 := S2/radcor;
S3 := S3/radcor;
S4 := S4/radcor;
TL1 := L1 + S1;
TL2 := L2 + S2;
TL3 := L3 + S3;
TL4 := L4 + S4;
B1 := 0.0006502 * sin(TL1 - W1)
+ 0.0001835 * sin(TL1 - W2)
+ 0.0000329 * sin(TL1 - W3)
- 0.0000311 * sin(TL1 - NodeJup)
+ 0.0000093 * sin(TL1 - W4)
+ 0.0000075 * sin(3*TL1 - 4*L2 - 1.9927/radcor * S1 + W2)
+ 0.0000046 * sin(TL1 + NodeJup - 2*LongPerJ - 2*AnomJup);
B1 := ArcTan(B1);
B2 := 0.0081275 * sin(TL2 - W2)
+ 0.0004512 * sin(TL2 - W3)
- 0.0003286 * sin(TL2 - NodeJup)
+ 0.0001164 * sin(TL2 - W4)
+ 0.0000273 * sin(L1 - 2*L3 + 1.0146/radcor * S2 + W2)
+ 0.0000143 * sin(TL2 + NodeJup - 2*LongPerJ - 2*AnomJup)
- 0.0000143 * sin(TL2 - W1)
+ 0.0000035 * sin(TL2 - NodeJup + AnomJup)
- 0.0000028 * sin(L1 - 2*L3 + 1.0146/radcor * S2 + W3);
B2 := ArcTan(B2);
B3 := 0.0032364 * sin(TL3 - W3)
- 0.0016911 * sin(TL3 - NodeJup)
+ 0.0006849 * sin(TL3 - W4)
- 0.0002806 * sin(TL3 - W2)
+ 0.0000321 * sin(TL3 + NodeJup - 2*LongPerJ - 2*AnomJup)
+ 0.0000051 * sin(TL3 - NodeJup + AnomJup)
- 0.0000045 * sin(TL3 - NodeJup - AnomJup)
- 0.0000045 * sin(TL3 + NodeJup - 2*LongPerJ)
+ 0.0000037 * sin(TL3 + NodeJup - 2*LongPerJ - 3*AnomJup)
+ 0.0000030 * sin(2*L2 - 3*TL3 + 4.03/radcor * S3 + W2)
- 0.0000021 * sin(2*L2 - 3*TL3 + 4.03/radcor * S3 + W3);
B3 := ArcTan(B3);
B4 := -0.0076579 * sin(TL4 - NodeJup)
+ 0.0044148 * sin(TL4 - W4)
- 0.0005106 * sin(TL4 - W3)
+ 0.0000773 * sin(TL4 + NodeJup - 2*LongPerJ - 2*AnomJup)
+ 0.0000104 * sin(TL4 - NodeJup + AnomJup)
- 0.0000102 * sin(TL4 - NodeJup - AnomJup)
+ 0.0000088 * sin(TL4 + NodeJup - 2*LongPerJ - 3*AnomJup)
- 0.0000038 * sin(TL4 + NodeJup - 2*LongPerJ - AnomJup);
B4 := ArcTan(B4);
R1 := -0.0041339 * cos(2*(L1-L2))
- 0.0000395 * cos(L1 - Pi3)
- 0.0000214 * cos(L1 - Pi4)
+ 0.0000170 * cos(L1 - L2)
- 0.0000162 * cos(L1 - Pi1)
- 0.0000130 * cos(4*(L1-L2))
+ 0.0000106 * cos(L1 - L3)
- 0.0000063 * cos(L1 + Pi3 - 2*LongPerJ - 2*AnomJup);
R2 := 0.0093847 * cos(L1-L2)
- 0.0003114 * cos(L2 - Pi3)
- 0.0001738 * cos(L2 - Pi4)
- 0.0000941 * cos(L2 - Pi2)
+ 0.0000553 * cos(L2 - L3)
+ 0.0000523 * cos(L1 - L3)
- 0.0000290 * cos(2*(L1-L2))
+ 0.0000166 * cos(2*(L2-W2))
+ 0.0000107 * cos(L1 - 2*L3 + Pi3)
- 0.0000102 * cos(L2 - Pi1)
- 0.0000091 * cos(2*(L1-L3));
R3 := -0.0014377 * cos(L3 - Pi3)
- 0.0007904 * cos(L3 - Pi4)
+ 0.0006342 * cos(L2 - L3)
- 0.0001758 * cos(2*(L3-L4))
+ 0.0000294 * cos(L3 - L4)
- 0.0000156 * cos(3*(L3-L4))
+ 0.0000155 * cos(L1 - L3)
- 0.0000153 * cos(L1 - L2)
+ 0.0000070 * cos(2*L2 - 3*L3 + Pi3)
- 0.0000051 * cos(L3 + Pi3 - 2*LongPerJ - 2*AnomJup);
R4 := -0.0073391 * cos(L4 - Pi4)
+ 0.0001620 * cos(L4 - Pi3)
+ 0.0000974 * cos(L3 - L4)
- 0.0000541 * cos(L4 + Pi4 - 2*LongPerJ - 2*AnomJup)
- 0.0000269 * cos(2*(L4-Pi4))
+ 0.0000182 * cos(L4- LongPerJ)
+ 0.0000177 * cos(2*(L3-L4))
- 0.0000167 * cos(2*L4 - NodeJup - W4)
+ 0.0000167 * cos(NodeJup - W4)
- 0.0000155 * cos(2*(L4-LongPerj-AnomJup))
+ 0.0000142 * cos(2*(L4-NodeJup))
+ 0.0000104 * cos(L1 - L4)
+ 0.0000092 * cos(L2 - L4)
- 0.0000089 * cos(L4 - LongPerJ - AnomJup)
- 0.0000062 * cos(L4 + Pi4 - 2*LongPerJ - 3*AnomJup)
+ 0.0000048 * cos(2*(L4-W4));
R1 := 5.90730 * (1 + R1);
R2 := 9.39912 * (1 + R2);
R3 := 14.99240 * (1 + R3);
R4 := 26.36990 * (1 + R4);
T0 := (AJD - 2433282.423) / 36525;
Precession := (1.3966626*T0 + 0.0003088*sqr(T0)) / radcor;
TL1 := TL1 + Precession;
TL2 := TL2 + Precession;
TL3 := TL3 + Precession;
TL4 := TL4 + Precession;
NodeJup := NodeJup + Precession;
T0 := (AJD - AstJulianDatePrim(1900, 1, 1, 0)) / 36525;
Inclination := (3.120262 + 0.0006*T0) / radcor;
SatX[1] := R1 * cos(TL1 - NodeJup) * cos(B1);
SatY[1] := R1 * sin(TL1 - NodeJup) * cos(B1);
SatZ[1] := R1 * sin(B1);
SatX[2] := R2 * cos(TL2 - NodeJup) * cos(B2);
SatY[2] := R2 * sin(TL2 - NodeJup) * cos(B2);
SatZ[2] := R2 * sin(B2);
SatX[3] := R3 * cos(TL3 - NodeJup) * cos(B3);
SatY[3] := R3 * sin(TL3 - NodeJup) * cos(B3);
SatZ[3] := R3 * sin(B3);
SatX[4] := R4 * cos(TL4 - NodeJup) * cos(B4);
SatY[4] := R4 * sin(TL4 - NodeJup) * cos(B4);
SatZ[4] := R4 * sin(B4);
SatX[5] := 0;
SatY[5] := 0;
SatZ[5] := 1;
T0 := (AJD - 2451545.0) / 36525.0;
TD1 := 100.464441
+ 1.0209550 * T0
+ 0.00040117 * sqr(T0)
+ 0.000000569 * sqr(T0) * T0;
TD1 := TD1 / radcor;
TD2 := 1.303270
- 0.0054966 * T0
+ 0.00000465 * sqr(T0)
- 0.000000004 * sqr(T0) * T0;
TD2 := TD2 / radcor;
for I := 1 to 5 do begin
Transforms[I].A[1] := SatX[I];
Transforms[I].B[1] := SatY[I] * cos(Inclination)
- SatZ[I] * sin(Inclination);
Transforms[I].C[1] := SatY[I] * sin(Inclination)
+ SatZ[I] * cos(Inclination);
Transforms[I].A[2] := Transforms[I].A[1] * cos(NodeJup - TD1)
- Transforms[I].B[1] * sin(NodeJup - TD1);
Transforms[I].B[2] := Transforms[I].A[1] * sin(NodeJup - TD1)
+ Transforms[I].B[1] * cos(NodeJup - TD1);
Transforms[I].C[2] := Transforms[I].C[1];
Transforms[I].A[3] := Transforms[I].A[2];
Transforms[I].B[3] := Transforms[I].B[2] * cos(TD2)
- Transforms[I].C[2] * sin(TD2);
Transforms[I].C[3] := Transforms[I].B[2] * sin(TD2)
+ Transforms[I].C[2] * cos(TD2);
Transforms[I].A[4] := Transforms[I].A[3] * cos(TD1)
- Transforms[I].B[3] * sin(TD1);
Transforms[I].B[4] := Transforms[I].A[3] * sin(TD1)
+ Transforms[I].B[3] * cos(TD1);
Transforms[I].C[4] := Transforms[I].C[3];
Transforms[I].A[5] := Transforms[I].A[4] * sin(Jup1)
- Transforms[I].B[4] * cos(Jup1);
Transforms[I].B[5] := Transforms[I].A[4] * cos(Jup1)
+ Transforms[I].B[4] * sin(Jup1);
Transforms[I].C[5] := Transforms[I].C[4];
Transforms[I].A[6] := Transforms[I].A[5];
Transforms[I].B[6] := Transforms[I].C[5] * sin(Jup2)
+ Transforms[I].B[5] * cos(Jup2);
Transforms[I].C[6] := Transforms[I].C[5] * cos(Jup2)
- Transforms[I].B[5] * sin(Jup2);
end;
Angle := StInvTan2(Transforms[5].C[6], Transforms[5].A[6]);
{Io calculations}
Result.Io.X := Transforms[1].A[6] * cos(Angle)
- Transforms[1].C[6] * sin(Angle);
Result.Io.Y := Transforms[1].A[6] * sin(Angle)
+ Transforms[1].C[6] * cos(Angle);
TD1 := Transforms[1].B[6];
{correct for light time}
TD2 := abs(TD1) / 17295 * sqrt(1 - sqr(Result.Io.X/R1));
Result.Io.X := Result.Io.X + TD2;
{correct for perspective}
TD2 := EJDist / (EJDist + TD1/2095);
Result.Io.X := Result.Io.X * TD2;
Result.Io.Y := Result.Io.Y * TD2;
{Europa calculations}
Result.Europa.X := Transforms[2].A[6] * cos(Angle)
- Transforms[2].C[6] * sin(Angle);
Result.Europa.Y := Transforms[2].A[6] * sin(Angle)
+ Transforms[2].C[6] * cos(Angle);
TD1 := Transforms[2].B[6];
{correct for light time}
TD2 := abs(TD1) / 21819 * sqrt(1 - sqr(Result.Europa.X/R2));
Result.Europa.X := Result.Europa.X + TD2;
{correct for perspective}
TD2 := EJDist / (EJDist + TD1/2095);
Result.Europa.X := Result.Europa.X * TD2;
Result.Europa.Y := Result.Europa.Y * TD2;
{Ganymede calculations}
Result.Ganymede.X := Transforms[3].A[6] * cos(Angle)
- Transforms[3].C[6] * sin(Angle);
Result.Ganymede.Y := Transforms[3].A[6] * sin(Angle)
+ Transforms[3].C[6] * cos(Angle);
TD1 := Transforms[3].B[6];
{correct for light time}
TD2 := abs(TD1) / 27558 * sqrt(1 - sqr(Result.Ganymede.X/R3));
Result.Ganymede.X := Result.Ganymede.X + TD2;
{correct for perspective}
TD2 := EJDist / (EJDist + TD1/2095);
Result.Ganymede.X := Result.Ganymede.X * TD2;
Result.Ganymede.Y := Result.Ganymede.Y * TD2;
{Callisto calculations}
Result.Callisto.X := Transforms[4].A[6] * cos(Angle)
- Transforms[4].C[6] * sin(Angle);
Result.Callisto.Y := Transforms[4].A[6] * sin(Angle)
+ Transforms[4].C[6] * cos(Angle);
TD1 := Transforms[4].B[6];
{correct for light time}
TD2 := abs(TD1) / 36548 * sqrt(1 - sqr(Result.Callisto.X/R4));
Result.Callisto.X := Result.Callisto.X + TD2;
{correct for perspective}
TD2 := EJDist / (EJDist + TD1/2095);
Result.Callisto.X := Result.Callisto.X * TD2;
Result.Callisto.Y := Result.Callisto.Y * TD2;
end;
{-------------------------------------------------------------------------}
function GetJupSats(JD : TDateTime; HighPrecision, Shadows : Boolean) : TStJupSats;
begin
if not HighPrecision then
Result := JupSatsLo(JD)
else
Result := JupSatsHi(JD, Shadows);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -