Hi André,
schade hätte dir folgendes angeboten (TP-Programm)
Funktion: NutationConst(T, NutLon, NutObl)
und hier der Quellcode
(*****************************************************************************)
(* *)
(* Copyright (c) 1991-1992 by Jeffrey Sax *)
(* All rights reserved *)
(* Veroeffentlicht und vertrieben durch *)
(* Willmann-Bell, Inc. *)
(* P.O. Box 35025 *)
(* Richmond, Virginia 23235 *)
(* Voice (804) 320-7016 FAX (804) 272-5920 *)
(* *)
(* *)
(* HINWEIS FUER KOMMERZIELLE SOFTWAREBENUTZER *)
(* *)
(* Vor dem Vertrieb von Software, die diesen Code enth„lt, *)
(* MUESSEN Sie sich schriftlich an Willmann-Bell, Inc. an *)
(* obengenannte Adresse wenden zur Bestaetigung der Serien- *)
(* nummer Ihres Buches (Astronomische Algorithmen von Jean *)
(* Meeus) sowie der Software. Eine weitere Verguetung wird *)
(* nicht gefordert werden, ABER Sie MUESSEN zu Beginn Ihres *)
(* Programmes (Ihrer Programme) folgende Notiz wiedergeben: *)
(* *)
(* Dieses Programm enthaelt Softwarecode *)
(* Copyright (c) 1991-1992 by Jeffrey Sax *)
(* und verteilt durch Willmann-Bell, Inc. *)
(* Serie ####### *)
(* *)
(*****************************************************************************)
(* Module: NUTCONST.PAS *)
(* Version 2.0 *)
(* Zuletzt bearbeitet: 1992 November 1 *)
(*****************************************************************************)
(*****************************************************************************)
(* Name: NutationConst *)
(* Typ: Procedure *)
(* Zweck: berechnet Nutation in L„nge und Schiefe *)
(* Argumente: *)
(* T : Zahl der Jahrhunderte seit J2000 *)
(* NutLon, NutObl : die gesuchte Nutation in L„nge und Schiefe *)
(*****************************************************************************)
procedure NutationConst(T : real; var NutLon, NutObl : real);
var
i, j, k, l : integer;
Flag : boolean;
MS, MM, FF, DD, OM : real;
SinVal, CosVal, ArgSin, ArgCos, Tmp : real;
LonArg, OblArg : real;
SinTab, CosTab : array[1..5] of TSINCOSTAB;
const
{Polynomials page 132}
POm : T3POLY = (125.0445222, -1934.1362608, 0.00207833, 2.22e-6);
PMSun : T3POLY = (357.5277233, 35999.0503400, -0.0001603 ,-3.33e-6);
PMMoon : T3POLY = (134.9629814, 477198.8673981, 0.0086972 , 1.778e-5);
PF : T3POLY = ( 93.2719103, 483202.0175381, -0.00368250, 3.056e-6);
PD : T3POLY = (297.8503631, 445267.1114800, -0.0019142 , 5.278e-6);
{ Tabelle 27.1 }
{ Die Koeffizienten der Winkel D, M, M'... sind in derselben Ordnung }
{ wie im Supplement to the Astronomical Almanac of 1984 (pS23-S25), }
{ anders als in Tabelle 27.1. Die Ordnung ist hier M, M', F, D, }
{ Omega. Argumente sind in Einheiten von 0.0001" und 0.00001" fr }
{ die Konstanten und T-Koefficienten der Nutation. Dies erlaubt es, }
{ alle Koeffiziente als Integer zu speichern. Die ersten Terme }
{ sind zu groá und werden darum seperat berechnet. }
NUTTABTERMS = 62;
NUTTABSIZE = 9;
NutTab : array[1..NUTTABTERMS,1..NUTTABSIZE] of integer =
(( 0, 0, 2,-2, 2,-13187,-16,5736,-31),
( 0, 0, 2, 0, 2, -2274, -2, 977, -5),
( 0, 0, 0, 0, 2, 2062, 2,-895, 5),
( 0, 1, 0, 0, 0, 1426,-34, 54, -1),
( 1, 0, 0, 0, 0, 712, 1, -7, 0),
( 0, 1, 2,-2, 2, -517, 12, 224, -6),
( 0, 0, 2, 0, 1, -386, -4, 200, 0),
( 1, 0, 2, 0, 2, -301, 0, 129, -1),
( 0,-1, 2,-2, 2, 217, -5, -95, 3),
( 1, 0, 0,-2, 0, -158, 0, 0, 0),
( 0, 0, 2,-2, 1, 129, 1, -70, 0),
(-1, 0, 2, 0, 2, 123, 0, -53, 0),
( 0, 0, 0, 2, 0, 63, 0, 0, 0),
( 1, 0, 0, 0, 1, 63, 1, -33, 0),
(-1, 0, 2, 2, 2, -59, 0, 26, 0),
(-1, 0, 0, 0, 1, -58, -1, 32, 0),
( 1, 0, 2, 0, 1, -51, 0, 27, 0),
( 2, 0, 0,-2, 0, 48, 0, 0, 0),
(-2, 0, 2, 0, 1, 46, 0, -24, 0),
( 0, 0, 2, 2, 2, -38, 0, 16, 0),
( 2, 0, 2, 0, 2, -31, 0, 13, 0),
( 2, 0, 0, 0, 0, 29, 0, 0, 0),
( 1, 0, 2,-2, 2, 29, 0, -12, 0),
( 0, 0, 2, 0, 0, 26, 0, 0, 0),
( 0, 0, 2,-2, 0, -22, 0, 0, 0),
(-1, 0, 2, 0, 1, 21, 0, -10, 0),
( 0, 2, 0, 0, 0, 17, -1, 0, 0),
(-1, 0, 0, 2, 1, 16, 0, -8, 0),
( 0, 2, 2,-2, 2, -16, 1, 7, 0),
( 0, 1, 0, 0, 1, -15, 0, 9, 0),
( 1, 0, 0,-2, 1, -13, 0, 7, 0),
( 0,-1, 0, 0, 1, -12, 0, 6, 0),
( 2, 0,-2, 0, 0, 11, 0, 0, 0),
(-1, 0, 2, 2, 1, -10, 0, 5, 0),
( 1, 0, 2, 2, 2, -8, 0, 3, 0),
( 0, 1, 2, 0, 2, 7, 0, -3, 0),
( 1, 1, 0,-2, 0, -7, 0, 0, 0),
( 0,-1, 2, 0, 2, -7, 0, 3, 0),
( 0, 0, 2, 2, 1, -7, 0, 3, 0),
( 1, 0, 0, 2, 0, 6, 0, 0, 0),
( 2, 0, 2,-2, 2, 6, 0, -3, 0),
( 1, 0, 2,-2, 1, 6, 0, -3, 0),
(-2, 0, 0, 2, 1, -6, 0, 3, 0),
( 0, 0, 0, 2, 1, -6, 0, 3, 0),
( 1,-1, 0, 0, 0, 5, 0, 0, 0),
( 0,-1, 2,-2, 1, -5, 0, 3, 0),
( 0, 0, 0,-2, 1, -5, 0, 3, 0),
( 2, 0, 2, 0, 1, -5, 0, 3, 0),
(-2, 0, 2, 0, 2, -3, 0, 0, 0),
( 2, 0, 0,-2, 1, 4, 0, 0, 0),
( 0, 1, 2,-2, 1, 4, 0, 0, 0),
( 1,-1, 2, 0, 2, -3, 0, 0, 0),
(-1,-1, 2, 2, 2, -3, 0, 0, 0),
( 3, 0, 2, 0, 2, -3, 0, 0, 0),
( 0,-1, 2, 2, 2, -3, 0, 0, 0),
( 1,-1, 0,-1, 0, -3, 0, 0, 0),
( 1, 0, 0,-1, 0, -4, 0, 0, 0),
( 0, 1, 0,-2, 0, -4, 0, 0, 0),
( 1, 0,-2, 0, 0, 4, 0, 0, 0),
( 0, 0, 0, 1, 0, -4, 0, 0, 0),
( 1, 1, 0, 0, 0, -3, 0, 0, 0),
( 1, 0, 2, 0, 0, 3, 0, 0, 0));
begin
MM := Eval3Poly(PMMoon, T) * DToR;
MS := Eval3Poly(PMSun, T) * DToR;
FF := Eval3Poly(PF, T) * DToR;
DD := Eval3Poly(PD, T) * DToR;
OM := Eval3Poly(POm, T) * DToR;
CalcSinCosTab(MM,3,SinTab[1], CosTab[1]);
CalcSinCosTab(MS,2,SinTab[2], CosTab[2]);
CalcSinCosTab(FF,4,SinTab[3], CosTab[3]);
CalcSinCosTab(DD,4,SinTab[4], CosTab[4]);
CalcSinCosTab(OM,2,SinTab[5], CosTab[5]);
{ die ersten Terme sind zu groá fr die Tabelle : }
NutLon := (-0.01742*T - 17.1996) * SinTab[5][1]; { sin(OM) }
NutObl := ( 0.00089*T + 9.2025) * CosTab[5][1]; { cos(OM) }
for i := 1 to NUTTABTERMS do
begin
Flag := true;
{ Erster Koeffizient ungleich Null eines der 5 Winkel }
for j := 1 to 5 do
begin
k := NutTab[j];
if (k <> 0) then
begin
if (k < 0)
then l := -k
else l := k;
SinVal := SinTab[j][l];
if (k < 0) then
SinVal := -SinVal;
CosVal := CosTab[j][l];
if Flag then
begin
ArgSin := SinVal;
ArgCos := CosVal;
Flag := false;
end
else
begin
Tmp := ArgSin * CosVal + ArgCos * SinVal;
ArgCos := ArgCos * CosVal - ArgSin * SinVal;
ArgSin := Tmp;
end
end
end;
OblArg := 0.0;
LonArg := NutTab[6] * 0.0001; { konstanter Koeffizient des Sinus }
k := NutTab[7]; { T-Koeffizient des Sinus }
if (k <> 0) then
LonArg := LonArg + 0.00001 * T * k;
k := NutTab[8]; { konstanter Koeffizient des Kosinus }
if (k <> 0) then
begin
OblArg := 0.0001 * k;
k := NutTab[9]; { T-Koeffizient des Kosinus }
if (k <> 0) then
OblArg := OblArg + 0.00001 * T * k;
end;
NutLon := NutLon + LonArg * ArgSin;
NutObl := NutObl + OblArg * ArgCos;
end;
NutLon := NutLon * SToR;
NutObl := NutObl * SToR;
end;