From a530069e990916e594fb447a1c661de451b8439c Mon Sep 17 00:00:00 2001 From: Don Cross Date: Tue, 21 Feb 2023 10:12:45 -0500 Subject: [PATCH] Improved Python VSOP table generation. The VSOP table generator for Python now is now better type-checked using classes and tuples. This also makes the code easier to understand. --- demo/python/astronomy.py | 1342 +++++++++++++------------- generate/codegen.c | 59 ++ generate/template/astronomy.py | 86 +- source/python/astronomy/astronomy.py | 1342 +++++++++++++------------- 4 files changed, 1432 insertions(+), 1397 deletions(-) diff --git a/demo/python/astronomy.py b/demo/python/astronomy.py index e6cc3870..3b999760 100644 --- a/demo/python/astronomy.py +++ b/demo/python/astronomy.py @@ -2409,674 +2409,664 @@ def GeoEmbState(time: Time) -> StateVector: #---------------------------------------------------------------------------- # BEGIN VSOP -# The list of list of list of list of list of floats in _vsop gets confusing! -# Here is the cheat sheet: -# _vsop [body_index] [model] [formula] [series] [coord] -# body_index: 0=Mercury, 1=Venus, ..., 7=Neptune. -# model: 0=longitude, 1=latitude, 2=radius -# formula: a list of series for each power of t -# series: a trigonometric series for a particular power of t -# coord: a list of exactly 3 floats [A, B, C] defining the trig term (A * cos(B + C*t)). +class _vsop_series_t: + def __init__(self, termList: List[Tuple[float, float, float]]) -> None: + self.termList = termList -_vsop: List[List[List[List[List[float]]]]] = [ - # Mercury - [ - [ - [ - [4.40250710144, 0.00000000000, 0.00000000000], - [0.40989414977, 1.48302034195, 26087.90314157420], - [0.05046294200, 4.47785489551, 52175.80628314840], - [0.00855346844, 1.16520322459, 78263.70942472259], - [0.00165590362, 4.11969163423, 104351.61256629678], - [0.00034561897, 0.77930768443, 130439.51570787099], - [0.00007583476, 3.71348404924, 156527.41884944518] - ], - [ - [26087.90313685529, 0.00000000000, 0.00000000000], - [0.01131199811, 6.21874197797, 26087.90314157420], - [0.00292242298, 3.04449355541, 52175.80628314840], - [0.00075775081, 6.08568821653, 78263.70942472259], - [0.00019676525, 2.80965111777, 104351.61256629678] - ] - ], - [ - [ - [0.11737528961, 1.98357498767, 26087.90314157420], - [0.02388076996, 5.03738959686, 52175.80628314840], - [0.01222839532, 3.14159265359, 0.00000000000], - [0.00543251810, 1.79644363964, 78263.70942472259], - [0.00129778770, 4.83232503958, 104351.61256629678], - [0.00031866927, 1.58088495658, 130439.51570787099], - [0.00007963301, 4.60972126127, 156527.41884944518] - ], - [ - [0.00274646065, 3.95008450011, 26087.90314157420], - [0.00099737713, 3.14159265359, 0.00000000000] - ] - ], - [ - [ - [0.39528271651, 0.00000000000, 0.00000000000], - [0.07834131818, 6.19233722598, 26087.90314157420], - [0.00795525558, 2.95989690104, 52175.80628314840], - [0.00121281764, 6.01064153797, 78263.70942472259], - [0.00021921969, 2.77820093972, 104351.61256629678], - [0.00004354065, 5.82894543774, 130439.51570787099] - ], - [ - [0.00217347740, 4.65617158665, 26087.90314157420], - [0.00044141826, 1.42385544001, 52175.80628314840] - ] - ] -], +class _vsop_formula_t: + def __init__(self, seriesList: List[_vsop_series_t]) -> None: + self.seriesList = seriesList - # Venus - [ - [ - [ - [3.17614666774, 0.00000000000, 0.00000000000], - [0.01353968419, 5.59313319619, 10213.28554621100], - [0.00089891645, 5.30650047764, 20426.57109242200], - [0.00005477194, 4.41630661466, 7860.41939243920], - [0.00003455741, 2.69964447820, 11790.62908865880], - [0.00002372061, 2.99377542079, 3930.20969621960], - [0.00001317168, 5.18668228402, 26.29831979980], - [0.00001664146, 4.25018630147, 1577.34354244780], - [0.00001438387, 4.15745084182, 9683.59458111640], - [0.00001200521, 6.15357116043, 30639.85663863300] - ], - [ - [10213.28554621638, 0.00000000000, 0.00000000000], - [0.00095617813, 2.46406511110, 10213.28554621100], - [0.00007787201, 0.62478482220, 20426.57109242200] - ] - ], - [ - [ - [0.05923638472, 0.26702775812, 10213.28554621100], - [0.00040107978, 1.14737178112, 20426.57109242200], - [0.00032814918, 3.14159265359, 0.00000000000] - ], - [ - [0.00287821243, 1.88964962838, 10213.28554621100] - ] - ], - [ - [ - [0.72334820891, 0.00000000000, 0.00000000000], - [0.00489824182, 4.02151831717, 10213.28554621100], - [0.00001658058, 4.90206728031, 20426.57109242200], - [0.00001378043, 1.12846591367, 11790.62908865880], - [0.00001632096, 2.84548795207, 7860.41939243920], - [0.00000498395, 2.58682193892, 9683.59458111640], - [0.00000221985, 2.01346696541, 19367.18916223280], - [0.00000237454, 2.55136053886, 15720.83878487840] - ], - [ - [0.00034551041, 0.89198706276, 10213.28554621100] - ] - ] -], +class _vsop_model_t: + def __init__(self, lon: _vsop_formula_t, lat: _vsop_formula_t, rad: _vsop_formula_t) -> None: + self.lon = lon + self.lat = lat + self.rad = rad - # Earth - [ - [ - [ - [1.75347045673, 0.00000000000, 0.00000000000], - [0.03341656453, 4.66925680415, 6283.07584999140], - [0.00034894275, 4.62610242189, 12566.15169998280], - [0.00003417572, 2.82886579754, 3.52311834900], - [0.00003497056, 2.74411783405, 5753.38488489680], - [0.00003135899, 3.62767041756, 77713.77146812050], - [0.00002676218, 4.41808345438, 7860.41939243920], - [0.00002342691, 6.13516214446, 3930.20969621960], - [0.00001273165, 2.03709657878, 529.69096509460], - [0.00001324294, 0.74246341673, 11506.76976979360], - [0.00000901854, 2.04505446477, 26.29831979980], - [0.00001199167, 1.10962946234, 1577.34354244780], - [0.00000857223, 3.50849152283, 398.14900340820], - [0.00000779786, 1.17882681962, 5223.69391980220], - [0.00000990250, 5.23268072088, 5884.92684658320], - [0.00000753141, 2.53339052847, 5507.55323866740], - [0.00000505267, 4.58292599973, 18849.22754997420], - [0.00000492392, 4.20505711826, 775.52261132400], - [0.00000356672, 2.91954114478, 0.06731030280], - [0.00000284125, 1.89869240932, 796.29800681640], - [0.00000242879, 0.34481445893, 5486.77784317500], - [0.00000317087, 5.84901948512, 11790.62908865880], - [0.00000271112, 0.31486255375, 10977.07880469900], - [0.00000206217, 4.80646631478, 2544.31441988340], - [0.00000205478, 1.86953770281, 5573.14280143310], - [0.00000202318, 2.45767790232, 6069.77675455340], - [0.00000126225, 1.08295459501, 20.77539549240], - [0.00000155516, 0.83306084617, 213.29909543800] - ], - [ - [6283.07584999140, 0.00000000000, 0.00000000000], - [0.00206058863, 2.67823455808, 6283.07584999140], - [0.00004303419, 2.63512233481, 12566.15169998280] - ], - [ - [0.00008721859, 1.07253635559, 6283.07584999140] - ] - ], - [ - [ - ], - [ - [0.00227777722, 3.41376620530, 6283.07584999140], - [0.00003805678, 3.37063423795, 12566.15169998280] - ] - ], - [ - [ - [1.00013988784, 0.00000000000, 0.00000000000], - [0.01670699632, 3.09846350258, 6283.07584999140], - [0.00013956024, 3.05524609456, 12566.15169998280], - [0.00003083720, 5.19846674381, 77713.77146812050], - [0.00001628463, 1.17387558054, 5753.38488489680], - [0.00001575572, 2.84685214877, 7860.41939243920], - [0.00000924799, 5.45292236722, 11506.76976979360], - [0.00000542439, 4.56409151453, 3930.20969621960], - [0.00000472110, 3.66100022149, 5884.92684658320], - [0.00000085831, 1.27079125277, 161000.68573767410], - [0.00000057056, 2.01374292245, 83996.84731811189], - [0.00000055736, 5.24159799170, 71430.69561812909], - [0.00000174844, 3.01193636733, 18849.22754997420], - [0.00000243181, 4.27349530790, 11790.62908865880] - ], - [ - [0.00103018607, 1.10748968172, 6283.07584999140], - [0.00001721238, 1.06442300386, 12566.15169998280] - ], - [ - [0.00004359385, 5.78455133808, 6283.07584999140] - ] - ] -], - - # Mars - [ - [ - [ - [6.20347711581, 0.00000000000, 0.00000000000], - [0.18656368093, 5.05037100270, 3340.61242669980], - [0.01108216816, 5.40099836344, 6681.22485339960], - [0.00091798406, 5.75478744667, 10021.83728009940], - [0.00027744987, 5.97049513147, 3.52311834900], - [0.00010610235, 2.93958560338, 2281.23049651060], - [0.00012315897, 0.84956094002, 2810.92146160520], - [0.00008926784, 4.15697846427, 0.01725365220], - [0.00008715691, 6.11005153139, 13362.44970679920], - [0.00006797556, 0.36462229657, 398.14900340820], - [0.00007774872, 3.33968761376, 5621.84292321040], - [0.00003575078, 1.66186505710, 2544.31441988340], - [0.00004161108, 0.22814971327, 2942.46342329160], - [0.00003075252, 0.85696614132, 191.44826611160], - [0.00002628117, 0.64806124465, 3337.08930835080], - [0.00002937546, 6.07893711402, 0.06731030280], - [0.00002389414, 5.03896442664, 796.29800681640], - [0.00002579844, 0.02996736156, 3344.13554504880], - [0.00001528141, 1.14979301996, 6151.53388830500], - [0.00001798806, 0.65634057445, 529.69096509460], - [0.00001264357, 3.62275122593, 5092.15195811580], - [0.00001286228, 3.06796065034, 2146.16541647520], - [0.00001546404, 2.91579701718, 1751.53953141600], - [0.00001024902, 3.69334099279, 8962.45534991020], - [0.00000891566, 0.18293837498, 16703.06213349900], - [0.00000858759, 2.40093811940, 2914.01423582380], - [0.00000832715, 2.46418619474, 3340.59517304760], - [0.00000832720, 4.49495782139, 3340.62968035200], - [0.00000712902, 3.66335473479, 1059.38193018920], - [0.00000748723, 3.82248614017, 155.42039943420], - [0.00000723861, 0.67497311481, 3738.76143010800], - [0.00000635548, 2.92182225127, 8432.76438481560], - [0.00000655162, 0.48864064125, 3127.31333126180], - [0.00000550474, 3.81001042328, 0.98032106820], - [0.00000552750, 4.47479317037, 1748.01641306700], - [0.00000425966, 0.55364317304, 6283.07584999140], - [0.00000415131, 0.49662285038, 213.29909543800], - [0.00000472167, 3.62547124025, 1194.44701022460], - [0.00000306551, 0.38052848348, 6684.74797174860], - [0.00000312141, 0.99853944405, 6677.70173505060], - [0.00000293198, 4.22131299634, 20.77539549240], - [0.00000302375, 4.48618007156, 3532.06069281140], - [0.00000274027, 0.54222167059, 3340.54511639700], - [0.00000281079, 5.88163521788, 1349.86740965880], - [0.00000231183, 1.28242156993, 3870.30339179440], - [0.00000283602, 5.76885434940, 3149.16416058820], - [0.00000236117, 5.75503217933, 3333.49887969900], - [0.00000274033, 0.13372524985, 3340.67973700260], - [0.00000299395, 2.78323740866, 6254.62666252360] - ], - [ - [3340.61242700512, 0.00000000000, 0.00000000000], - [0.01457554523, 3.60433733236, 3340.61242669980], - [0.00168414711, 3.92318567804, 6681.22485339960], - [0.00020622975, 4.26108844583, 10021.83728009940], - [0.00003452392, 4.73210393190, 3.52311834900], - [0.00002586332, 4.60670058555, 13362.44970679920], - [0.00000841535, 4.45864030426, 2281.23049651060] - ], - [ - [0.00058152577, 2.04961712429, 3340.61242669980], - [0.00013459579, 2.45738706163, 6681.22485339960] - ] - ], - [ - [ - [0.03197134986, 3.76832042431, 3340.61242669980], - [0.00298033234, 4.10616996305, 6681.22485339960], - [0.00289104742, 0.00000000000, 0.00000000000], - [0.00031365539, 4.44651053090, 10021.83728009940], - [0.00003484100, 4.78812549260, 13362.44970679920] - ], - [ - [0.00217310991, 6.04472194776, 3340.61242669980], - [0.00020976948, 3.14159265359, 0.00000000000], - [0.00012834709, 1.60810667915, 6681.22485339960] - ] - ], - [ - [ - [1.53033488271, 0.00000000000, 0.00000000000], - [0.14184953160, 3.47971283528, 3340.61242669980], - [0.00660776362, 3.81783443019, 6681.22485339960], - [0.00046179117, 4.15595316782, 10021.83728009940], - [0.00008109733, 5.55958416318, 2810.92146160520], - [0.00007485318, 1.77239078402, 5621.84292321040], - [0.00005523191, 1.36436303770, 2281.23049651060], - [0.00003825160, 4.49407183687, 13362.44970679920], - [0.00002306537, 0.09081579001, 2544.31441988340], - [0.00001999396, 5.36059617709, 3337.08930835080], - [0.00002484394, 4.92545639920, 2942.46342329160], - [0.00001960195, 4.74249437639, 3344.13554504880], - [0.00001167119, 2.11260868341, 5092.15195811580], - [0.00001102816, 5.00908403998, 398.14900340820], - [0.00000899066, 4.40791133207, 529.69096509460], - [0.00000992252, 5.83861961952, 6151.53388830500], - [0.00000807354, 2.10217065501, 1059.38193018920], - [0.00000797915, 3.44839203899, 796.29800681640], - [0.00000740975, 1.49906336885, 2146.16541647520] - ], - [ - [0.01107433345, 2.03250524857, 3340.61242669980], - [0.00103175887, 2.37071847807, 6681.22485339960], - [0.00012877200, 0.00000000000, 0.00000000000], - [0.00010815880, 2.70888095665, 10021.83728009940] - ], - [ - [0.00044242249, 0.47930604954, 3340.61242669980], - [0.00008138042, 0.86998389204, 6681.22485339960] - ] - ] -], - - # Jupiter - [ - [ - [ - [0.59954691494, 0.00000000000, 0.00000000000], - [0.09695898719, 5.06191793158, 529.69096509460], - [0.00573610142, 1.44406205629, 7.11354700080], - [0.00306389205, 5.41734730184, 1059.38193018920], - [0.00097178296, 4.14264726552, 632.78373931320], - [0.00072903078, 3.64042916389, 522.57741809380], - [0.00064263975, 3.41145165351, 103.09277421860], - [0.00039806064, 2.29376740788, 419.48464387520], - [0.00038857767, 1.27231755835, 316.39186965660], - [0.00027964629, 1.78454591820, 536.80451209540], - [0.00013589730, 5.77481040790, 1589.07289528380], - [0.00008246349, 3.58227925840, 206.18554843720], - [0.00008768704, 3.63000308199, 949.17560896980], - [0.00007368042, 5.08101194270, 735.87651353180], - [0.00006263150, 0.02497628807, 213.29909543800], - [0.00006114062, 4.51319998626, 1162.47470440780], - [0.00004905396, 1.32084470588, 110.20632121940], - [0.00005305285, 1.30671216791, 14.22709400160], - [0.00005305441, 4.18625634012, 1052.26838318840], - [0.00004647248, 4.69958103684, 3.93215326310], - [0.00003045023, 4.31676431084, 426.59819087600], - [0.00002609999, 1.56667394063, 846.08283475120], - [0.00002028191, 1.06376530715, 3.18139373770], - [0.00001764763, 2.14148655117, 1066.49547719000], - [0.00001722972, 3.88036268267, 1265.56747862640], - [0.00001920945, 0.97168196472, 639.89728631400], - [0.00001633223, 3.58201833555, 515.46387109300], - [0.00001431999, 4.29685556046, 625.67019231240], - [0.00000973272, 4.09764549134, 95.97922721780] - ], - [ - [529.69096508814, 0.00000000000, 0.00000000000], - [0.00489503243, 4.22082939470, 529.69096509460], - [0.00228917222, 6.02646855621, 7.11354700080], - [0.00030099479, 4.54540782858, 1059.38193018920], - [0.00020720920, 5.45943156902, 522.57741809380], - [0.00012103653, 0.16994816098, 536.80451209540], - [0.00006067987, 4.42422292017, 103.09277421860], - [0.00005433968, 3.98480737746, 419.48464387520], - [0.00004237744, 5.89008707199, 14.22709400160] - ], - [ - [0.00047233601, 4.32148536482, 7.11354700080], - [0.00030649436, 2.92977788700, 529.69096509460], - [0.00014837605, 3.14159265359, 0.00000000000] - ] - ], - [ - [ - [0.02268615702, 3.55852606721, 529.69096509460], - [0.00109971634, 3.90809347197, 1059.38193018920], - [0.00110090358, 0.00000000000, 0.00000000000], - [0.00008101428, 3.60509572885, 522.57741809380], - [0.00006043996, 4.25883108339, 1589.07289528380], - [0.00006437782, 0.30627119215, 536.80451209540] - ], - [ - [0.00078203446, 1.52377859742, 529.69096509460] - ] - ], - [ - [ - [5.20887429326, 0.00000000000, 0.00000000000], - [0.25209327119, 3.49108639871, 529.69096509460], - [0.00610599976, 3.84115365948, 1059.38193018920], - [0.00282029458, 2.57419881293, 632.78373931320], - [0.00187647346, 2.07590383214, 522.57741809380], - [0.00086792905, 0.71001145545, 419.48464387520], - [0.00072062974, 0.21465724607, 536.80451209540], - [0.00065517248, 5.97995884790, 316.39186965660], - [0.00029134542, 1.67759379655, 103.09277421860], - [0.00030135335, 2.16132003734, 949.17560896980], - [0.00023453271, 3.54023522184, 735.87651353180], - [0.00022283743, 4.19362594399, 1589.07289528380], - [0.00023947298, 0.27458037480, 7.11354700080], - [0.00013032614, 2.96042965363, 1162.47470440780], - [0.00009703360, 1.90669633585, 206.18554843720], - [0.00012749023, 2.71550286592, 1052.26838318840], - [0.00007057931, 2.18184839926, 1265.56747862640], - [0.00006137703, 6.26418240033, 846.08283475120], - [0.00002616976, 2.00994012876, 1581.95934828300] - ], - [ - [0.01271801520, 2.64937512894, 529.69096509460], - [0.00061661816, 3.00076460387, 1059.38193018920], - [0.00053443713, 3.89717383175, 522.57741809380], - [0.00031185171, 4.88276958012, 536.80451209540], - [0.00041390269, 0.00000000000, 0.00000000000] - ] - ] -], - - # Saturn - [ - [ - [ - [0.87401354025, 0.00000000000, 0.00000000000], - [0.11107659762, 3.96205090159, 213.29909543800], - [0.01414150957, 4.58581516874, 7.11354700080], - [0.00398379389, 0.52112032699, 206.18554843720], - [0.00350769243, 3.30329907896, 426.59819087600], - [0.00206816305, 0.24658372002, 103.09277421860], - [0.00079271300, 3.84007056878, 220.41264243880], - [0.00023990355, 4.66976924553, 110.20632121940], - [0.00016573588, 0.43719228296, 419.48464387520], - [0.00014906995, 5.76903183869, 316.39186965660], - [0.00015820290, 0.93809155235, 632.78373931320], - [0.00014609559, 1.56518472000, 3.93215326310], - [0.00013160301, 4.44891291899, 14.22709400160], - [0.00015053543, 2.71669915667, 639.89728631400], - [0.00013005299, 5.98119023644, 11.04570026390], - [0.00010725067, 3.12939523827, 202.25339517410], - [0.00005863206, 0.23656938524, 529.69096509460], - [0.00005227757, 4.20783365759, 3.18139373770], - [0.00006126317, 1.76328667907, 277.03499374140], - [0.00005019687, 3.17787728405, 433.71173787680], - [0.00004592550, 0.61977744975, 199.07200143640], - [0.00004005867, 2.24479718502, 63.73589830340], - [0.00002953796, 0.98280366998, 95.97922721780], - [0.00003873670, 3.22283226966, 138.51749687070], - [0.00002461186, 2.03163875071, 735.87651353180], - [0.00003269484, 0.77492638211, 949.17560896980], - [0.00001758145, 3.26580109940, 522.57741809380], - [0.00001640172, 5.50504453050, 846.08283475120], - [0.00001391327, 4.02333150505, 323.50541665740], - [0.00001580648, 4.37265307169, 309.27832265580], - [0.00001123498, 2.83726798446, 415.55249061210], - [0.00001017275, 3.71700135395, 227.52618943960], - [0.00000848642, 3.19150170830, 209.36694217490] - ], - [ - [213.29909521690, 0.00000000000, 0.00000000000], - [0.01297370862, 1.82834923978, 213.29909543800], - [0.00564345393, 2.88499717272, 7.11354700080], - [0.00093734369, 1.06311793502, 426.59819087600], - [0.00107674962, 2.27769131009, 206.18554843720], - [0.00040244455, 2.04108104671, 220.41264243880], - [0.00019941774, 1.27954390470, 103.09277421860], - [0.00010511678, 2.74880342130, 14.22709400160], - [0.00006416106, 0.38238295041, 639.89728631400], - [0.00004848994, 2.43037610229, 419.48464387520], - [0.00004056892, 2.92133209468, 110.20632121940], - [0.00003768635, 3.64965330780, 3.93215326310] - ], - [ - [0.00116441330, 1.17988132879, 7.11354700080], - [0.00091841837, 0.07325195840, 213.29909543800], - [0.00036661728, 0.00000000000, 0.00000000000], - [0.00015274496, 4.06493179167, 206.18554843720] - ] - ], - [ - [ - [0.04330678039, 3.60284428399, 213.29909543800], - [0.00240348302, 2.85238489373, 426.59819087600], - [0.00084745939, 0.00000000000, 0.00000000000], - [0.00030863357, 3.48441504555, 220.41264243880], - [0.00034116062, 0.57297307557, 206.18554843720], - [0.00014734070, 2.11846596715, 639.89728631400], - [0.00009916667, 5.79003188904, 419.48464387520], - [0.00006993564, 4.73604689720, 7.11354700080], - [0.00004807588, 5.43305312061, 316.39186965660] - ], - [ - [0.00198927992, 4.93901017903, 213.29909543800], - [0.00036947916, 3.14159265359, 0.00000000000], - [0.00017966989, 0.51979431110, 426.59819087600] - ] - ], - [ - [ - [9.55758135486, 0.00000000000, 0.00000000000], - [0.52921382865, 2.39226219573, 213.29909543800], - [0.01873679867, 5.23549604660, 206.18554843720], - [0.01464663929, 1.64763042902, 426.59819087600], - [0.00821891141, 5.93520042303, 316.39186965660], - [0.00547506923, 5.01532618980, 103.09277421860], - [0.00371684650, 2.27114821115, 220.41264243880], - [0.00361778765, 3.13904301847, 7.11354700080], - [0.00140617506, 5.70406606781, 632.78373931320], - [0.00108974848, 3.29313390175, 110.20632121940], - [0.00069006962, 5.94099540992, 419.48464387520], - [0.00061053367, 0.94037691801, 639.89728631400], - [0.00048913294, 1.55733638681, 202.25339517410], - [0.00034143772, 0.19519102597, 277.03499374140], - [0.00032401773, 5.47084567016, 949.17560896980], - [0.00020936596, 0.46349251129, 735.87651353180], - [0.00009796004, 5.20477537945, 1265.56747862640], - [0.00011993338, 5.98050967385, 846.08283475120], - [0.00020839300, 1.52102476129, 433.71173787680], - [0.00015298404, 3.05943814940, 529.69096509460], - [0.00006465823, 0.17732249942, 1052.26838318840], - [0.00011380257, 1.73105427040, 522.57741809380], - [0.00003419618, 4.94550542171, 1581.95934828300] - ], - [ - [0.06182981340, 0.25843511480, 213.29909543800], - [0.00506577242, 0.71114625261, 206.18554843720], - [0.00341394029, 5.79635741658, 426.59819087600], - [0.00188491195, 0.47215589652, 220.41264243880], - [0.00186261486, 3.14159265359, 0.00000000000], - [0.00143891146, 1.40744822888, 7.11354700080] - ], - [ - [0.00436902572, 4.78671677509, 213.29909543800] - ] - ] -], - - # Uranus - [ - [ - [ - [5.48129294297, 0.00000000000, 0.00000000000], - [0.09260408234, 0.89106421507, 74.78159856730], - [0.01504247898, 3.62719260920, 1.48447270830], - [0.00365981674, 1.89962179044, 73.29712585900], - [0.00272328168, 3.35823706307, 149.56319713460], - [0.00070328461, 5.39254450063, 63.73589830340], - [0.00068892678, 6.09292483287, 76.26607127560], - [0.00061998615, 2.26952066061, 2.96894541660], - [0.00061950719, 2.85098872691, 11.04570026390], - [0.00026468770, 3.14152083966, 71.81265315070], - [0.00025710476, 6.11379840493, 454.90936652730], - [0.00021078850, 4.36059339067, 148.07872442630], - [0.00017818647, 1.74436930289, 36.64856292950], - [0.00014613507, 4.73732166022, 3.93215326310], - [0.00011162509, 5.82681796350, 224.34479570190], - [0.00010997910, 0.48865004018, 138.51749687070], - [0.00009527478, 2.95516862826, 35.16409022120], - [0.00007545601, 5.23626582400, 109.94568878850], - [0.00004220241, 3.23328220918, 70.84944530420], - [0.00004051900, 2.27755017300, 151.04766984290], - [0.00003354596, 1.06549007380, 4.45341812490], - [0.00002926718, 4.62903718891, 9.56122755560], - [0.00003490340, 5.48306144511, 146.59425171800], - [0.00003144069, 4.75199570434, 77.75054398390], - [0.00002922333, 5.35235361027, 85.82729883120], - [0.00002272788, 4.36600400036, 70.32818044240], - [0.00002051219, 1.51773566586, 0.11187458460], - [0.00002148602, 0.60745949945, 38.13303563780], - [0.00001991643, 4.92437588682, 277.03499374140], - [0.00001376226, 2.04283539351, 65.22037101170], - [0.00001666902, 3.62744066769, 380.12776796000], - [0.00001284107, 3.11347961505, 202.25339517410], - [0.00001150429, 0.93343589092, 3.18139373770], - [0.00001533221, 2.58594681212, 52.69019803950], - [0.00001281604, 0.54271272721, 222.86032299360], - [0.00001372139, 4.19641530878, 111.43016149680], - [0.00001221029, 0.19900650030, 108.46121608020], - [0.00000946181, 1.19253165736, 127.47179660680], - [0.00001150989, 4.17898916639, 33.67961751290] - ], - [ - [74.78159860910, 0.00000000000, 0.00000000000], - [0.00154332863, 5.24158770553, 74.78159856730], - [0.00024456474, 1.71260334156, 1.48447270830], - [0.00009258442, 0.42829732350, 11.04570026390], - [0.00008265977, 1.50218091379, 63.73589830340], - [0.00009150160, 1.41213765216, 149.56319713460] - ] - ], - [ - [ - [0.01346277648, 2.61877810547, 74.78159856730], - [0.00062341400, 5.08111189648, 149.56319713460], - [0.00061601196, 3.14159265359, 0.00000000000], - [0.00009963722, 1.61603805646, 76.26607127560], - [0.00009926160, 0.57630380333, 73.29712585900] - ], - [ - [0.00034101978, 0.01321929936, 74.78159856730] - ] - ], - [ - [ - [19.21264847206, 0.00000000000, 0.00000000000], - [0.88784984413, 5.60377527014, 74.78159856730], - [0.03440836062, 0.32836099706, 73.29712585900], - [0.02055653860, 1.78295159330, 149.56319713460], - [0.00649322410, 4.52247285911, 76.26607127560], - [0.00602247865, 3.86003823674, 63.73589830340], - [0.00496404167, 1.40139935333, 454.90936652730], - [0.00338525369, 1.58002770318, 138.51749687070], - [0.00243509114, 1.57086606044, 71.81265315070], - [0.00190522303, 1.99809394714, 1.48447270830], - [0.00161858838, 2.79137786799, 148.07872442630], - [0.00143706183, 1.38368544947, 11.04570026390], - [0.00093192405, 0.17437220467, 36.64856292950], - [0.00071424548, 4.24509236074, 224.34479570190], - [0.00089806014, 3.66105364565, 109.94568878850], - [0.00039009723, 1.66971401684, 70.84944530420], - [0.00046677296, 1.39976401694, 35.16409022120], - [0.00039025624, 3.36234773834, 277.03499374140], - [0.00036755274, 3.88649278513, 146.59425171800], - [0.00030348723, 0.70100838798, 151.04766984290], - [0.00029156413, 3.18056336700, 77.75054398390], - [0.00022637073, 0.72518687029, 529.69096509460], - [0.00011959076, 1.75043392140, 984.60033162190], - [0.00025620756, 5.25656086672, 380.12776796000] - ], - [ - [0.01479896629, 3.67205697578, 74.78159856730] - ] - ] -], - - # Neptune - [ - [ - [ - [5.31188633046, 0.00000000000, 0.00000000000], - [0.01798475530, 2.90101273890, 38.13303563780], - [0.01019727652, 0.48580922867, 1.48447270830], - [0.00124531845, 4.83008090676, 36.64856292950], - [0.00042064466, 5.41054993053, 2.96894541660], - [0.00037714584, 6.09221808686, 35.16409022120], - [0.00033784738, 1.24488874087, 76.26607127560], - [0.00016482741, 0.00007727998, 491.55792945680], - [0.00009198584, 4.93747051954, 39.61750834610], - [0.00008994250, 0.27462171806, 175.16605980020] - ], - [ - [38.13303563957, 0.00000000000, 0.00000000000], - [0.00016604172, 4.86323329249, 1.48447270830], - [0.00015744045, 2.27887427527, 38.13303563780] - ] - ], - [ - [ - [0.03088622933, 1.44104372644, 38.13303563780], - [0.00027780087, 5.91271884599, 76.26607127560], - [0.00027623609, 0.00000000000, 0.00000000000], - [0.00015355489, 2.52123799551, 36.64856292950], - [0.00015448133, 3.50877079215, 39.61750834610] - ] - ], - [ - [ - [30.07013205828, 0.00000000000, 0.00000000000], - [0.27062259632, 1.32999459377, 38.13303563780], - [0.01691764014, 3.25186135653, 36.64856292950], - [0.00807830553, 5.18592878704, 1.48447270830], - [0.00537760510, 4.52113935896, 35.16409022120], - [0.00495725141, 1.57105641650, 491.55792945680], - [0.00274571975, 1.84552258866, 175.16605980020], - [0.00012012320, 1.92059384991, 1021.24889455140], - [0.00121801746, 5.79754470298, 76.26607127560], - [0.00100896068, 0.37702724930, 73.29712585900], - [0.00135134092, 3.37220609835, 39.61750834610], - [0.00007571796, 1.07149207335, 388.46515523820] - ] - ] -], +_vsop: List[_vsop_model_t] = [ +_vsop_model_t( # Mercury + _vsop_formula_t([ + _vsop_series_t([ + (4.40250710144, 0.00000000000, 0.00000000000), + (0.40989414977, 1.48302034195, 26087.90314157420), + (0.05046294200, 4.47785489551, 52175.80628314840), + (0.00855346844, 1.16520322459, 78263.70942472259), + (0.00165590362, 4.11969163423, 104351.61256629678), + (0.00034561897, 0.77930768443, 130439.51570787099), + (0.00007583476, 3.71348404924, 156527.41884944518) + ]), + _vsop_series_t([ + (26087.90313685529, 0.00000000000, 0.00000000000), + (0.01131199811, 6.21874197797, 26087.90314157420), + (0.00292242298, 3.04449355541, 52175.80628314840), + (0.00075775081, 6.08568821653, 78263.70942472259), + (0.00019676525, 2.80965111777, 104351.61256629678) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.11737528961, 1.98357498767, 26087.90314157420), + (0.02388076996, 5.03738959686, 52175.80628314840), + (0.01222839532, 3.14159265359, 0.00000000000), + (0.00543251810, 1.79644363964, 78263.70942472259), + (0.00129778770, 4.83232503958, 104351.61256629678), + (0.00031866927, 1.58088495658, 130439.51570787099), + (0.00007963301, 4.60972126127, 156527.41884944518) + ]), + _vsop_series_t([ + (0.00274646065, 3.95008450011, 26087.90314157420), + (0.00099737713, 3.14159265359, 0.00000000000) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.39528271651, 0.00000000000, 0.00000000000), + (0.07834131818, 6.19233722598, 26087.90314157420), + (0.00795525558, 2.95989690104, 52175.80628314840), + (0.00121281764, 6.01064153797, 78263.70942472259), + (0.00021921969, 2.77820093972, 104351.61256629678), + (0.00004354065, 5.82894543774, 130439.51570787099) + ]), + _vsop_series_t([ + (0.00217347740, 4.65617158665, 26087.90314157420), + (0.00044141826, 1.42385544001, 52175.80628314840) + ]) + ]) +), +_vsop_model_t( # Venus + _vsop_formula_t([ + _vsop_series_t([ + (3.17614666774, 0.00000000000, 0.00000000000), + (0.01353968419, 5.59313319619, 10213.28554621100), + (0.00089891645, 5.30650047764, 20426.57109242200), + (0.00005477194, 4.41630661466, 7860.41939243920), + (0.00003455741, 2.69964447820, 11790.62908865880), + (0.00002372061, 2.99377542079, 3930.20969621960), + (0.00001317168, 5.18668228402, 26.29831979980), + (0.00001664146, 4.25018630147, 1577.34354244780), + (0.00001438387, 4.15745084182, 9683.59458111640), + (0.00001200521, 6.15357116043, 30639.85663863300) + ]), + _vsop_series_t([ + (10213.28554621638, 0.00000000000, 0.00000000000), + (0.00095617813, 2.46406511110, 10213.28554621100), + (0.00007787201, 0.62478482220, 20426.57109242200) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.05923638472, 0.26702775812, 10213.28554621100), + (0.00040107978, 1.14737178112, 20426.57109242200), + (0.00032814918, 3.14159265359, 0.00000000000) + ]), + _vsop_series_t([ + (0.00287821243, 1.88964962838, 10213.28554621100) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.72334820891, 0.00000000000, 0.00000000000), + (0.00489824182, 4.02151831717, 10213.28554621100), + (0.00001658058, 4.90206728031, 20426.57109242200), + (0.00001378043, 1.12846591367, 11790.62908865880), + (0.00001632096, 2.84548795207, 7860.41939243920), + (0.00000498395, 2.58682193892, 9683.59458111640), + (0.00000221985, 2.01346696541, 19367.18916223280), + (0.00000237454, 2.55136053886, 15720.83878487840) + ]), + _vsop_series_t([ + (0.00034551041, 0.89198706276, 10213.28554621100) + ]) + ]) +), +_vsop_model_t( # Earth + _vsop_formula_t([ + _vsop_series_t([ + (1.75347045673, 0.00000000000, 0.00000000000), + (0.03341656453, 4.66925680415, 6283.07584999140), + (0.00034894275, 4.62610242189, 12566.15169998280), + (0.00003417572, 2.82886579754, 3.52311834900), + (0.00003497056, 2.74411783405, 5753.38488489680), + (0.00003135899, 3.62767041756, 77713.77146812050), + (0.00002676218, 4.41808345438, 7860.41939243920), + (0.00002342691, 6.13516214446, 3930.20969621960), + (0.00001273165, 2.03709657878, 529.69096509460), + (0.00001324294, 0.74246341673, 11506.76976979360), + (0.00000901854, 2.04505446477, 26.29831979980), + (0.00001199167, 1.10962946234, 1577.34354244780), + (0.00000857223, 3.50849152283, 398.14900340820), + (0.00000779786, 1.17882681962, 5223.69391980220), + (0.00000990250, 5.23268072088, 5884.92684658320), + (0.00000753141, 2.53339052847, 5507.55323866740), + (0.00000505267, 4.58292599973, 18849.22754997420), + (0.00000492392, 4.20505711826, 775.52261132400), + (0.00000356672, 2.91954114478, 0.06731030280), + (0.00000284125, 1.89869240932, 796.29800681640), + (0.00000242879, 0.34481445893, 5486.77784317500), + (0.00000317087, 5.84901948512, 11790.62908865880), + (0.00000271112, 0.31486255375, 10977.07880469900), + (0.00000206217, 4.80646631478, 2544.31441988340), + (0.00000205478, 1.86953770281, 5573.14280143310), + (0.00000202318, 2.45767790232, 6069.77675455340), + (0.00000126225, 1.08295459501, 20.77539549240), + (0.00000155516, 0.83306084617, 213.29909543800) + ]), + _vsop_series_t([ + (6283.07584999140, 0.00000000000, 0.00000000000), + (0.00206058863, 2.67823455808, 6283.07584999140), + (0.00004303419, 2.63512233481, 12566.15169998280) + ]), + _vsop_series_t([ + (0.00008721859, 1.07253635559, 6283.07584999140) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + ]), + _vsop_series_t([ + (0.00227777722, 3.41376620530, 6283.07584999140), + (0.00003805678, 3.37063423795, 12566.15169998280) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (1.00013988784, 0.00000000000, 0.00000000000), + (0.01670699632, 3.09846350258, 6283.07584999140), + (0.00013956024, 3.05524609456, 12566.15169998280), + (0.00003083720, 5.19846674381, 77713.77146812050), + (0.00001628463, 1.17387558054, 5753.38488489680), + (0.00001575572, 2.84685214877, 7860.41939243920), + (0.00000924799, 5.45292236722, 11506.76976979360), + (0.00000542439, 4.56409151453, 3930.20969621960), + (0.00000472110, 3.66100022149, 5884.92684658320), + (0.00000085831, 1.27079125277, 161000.68573767410), + (0.00000057056, 2.01374292245, 83996.84731811189), + (0.00000055736, 5.24159799170, 71430.69561812909), + (0.00000174844, 3.01193636733, 18849.22754997420), + (0.00000243181, 4.27349530790, 11790.62908865880) + ]), + _vsop_series_t([ + (0.00103018607, 1.10748968172, 6283.07584999140), + (0.00001721238, 1.06442300386, 12566.15169998280) + ]), + _vsop_series_t([ + (0.00004359385, 5.78455133808, 6283.07584999140) + ]) + ]) +), +_vsop_model_t( # Mars + _vsop_formula_t([ + _vsop_series_t([ + (6.20347711581, 0.00000000000, 0.00000000000), + (0.18656368093, 5.05037100270, 3340.61242669980), + (0.01108216816, 5.40099836344, 6681.22485339960), + (0.00091798406, 5.75478744667, 10021.83728009940), + (0.00027744987, 5.97049513147, 3.52311834900), + (0.00010610235, 2.93958560338, 2281.23049651060), + (0.00012315897, 0.84956094002, 2810.92146160520), + (0.00008926784, 4.15697846427, 0.01725365220), + (0.00008715691, 6.11005153139, 13362.44970679920), + (0.00006797556, 0.36462229657, 398.14900340820), + (0.00007774872, 3.33968761376, 5621.84292321040), + (0.00003575078, 1.66186505710, 2544.31441988340), + (0.00004161108, 0.22814971327, 2942.46342329160), + (0.00003075252, 0.85696614132, 191.44826611160), + (0.00002628117, 0.64806124465, 3337.08930835080), + (0.00002937546, 6.07893711402, 0.06731030280), + (0.00002389414, 5.03896442664, 796.29800681640), + (0.00002579844, 0.02996736156, 3344.13554504880), + (0.00001528141, 1.14979301996, 6151.53388830500), + (0.00001798806, 0.65634057445, 529.69096509460), + (0.00001264357, 3.62275122593, 5092.15195811580), + (0.00001286228, 3.06796065034, 2146.16541647520), + (0.00001546404, 2.91579701718, 1751.53953141600), + (0.00001024902, 3.69334099279, 8962.45534991020), + (0.00000891566, 0.18293837498, 16703.06213349900), + (0.00000858759, 2.40093811940, 2914.01423582380), + (0.00000832715, 2.46418619474, 3340.59517304760), + (0.00000832720, 4.49495782139, 3340.62968035200), + (0.00000712902, 3.66335473479, 1059.38193018920), + (0.00000748723, 3.82248614017, 155.42039943420), + (0.00000723861, 0.67497311481, 3738.76143010800), + (0.00000635548, 2.92182225127, 8432.76438481560), + (0.00000655162, 0.48864064125, 3127.31333126180), + (0.00000550474, 3.81001042328, 0.98032106820), + (0.00000552750, 4.47479317037, 1748.01641306700), + (0.00000425966, 0.55364317304, 6283.07584999140), + (0.00000415131, 0.49662285038, 213.29909543800), + (0.00000472167, 3.62547124025, 1194.44701022460), + (0.00000306551, 0.38052848348, 6684.74797174860), + (0.00000312141, 0.99853944405, 6677.70173505060), + (0.00000293198, 4.22131299634, 20.77539549240), + (0.00000302375, 4.48618007156, 3532.06069281140), + (0.00000274027, 0.54222167059, 3340.54511639700), + (0.00000281079, 5.88163521788, 1349.86740965880), + (0.00000231183, 1.28242156993, 3870.30339179440), + (0.00000283602, 5.76885434940, 3149.16416058820), + (0.00000236117, 5.75503217933, 3333.49887969900), + (0.00000274033, 0.13372524985, 3340.67973700260), + (0.00000299395, 2.78323740866, 6254.62666252360) + ]), + _vsop_series_t([ + (3340.61242700512, 0.00000000000, 0.00000000000), + (0.01457554523, 3.60433733236, 3340.61242669980), + (0.00168414711, 3.92318567804, 6681.22485339960), + (0.00020622975, 4.26108844583, 10021.83728009940), + (0.00003452392, 4.73210393190, 3.52311834900), + (0.00002586332, 4.60670058555, 13362.44970679920), + (0.00000841535, 4.45864030426, 2281.23049651060) + ]), + _vsop_series_t([ + (0.00058152577, 2.04961712429, 3340.61242669980), + (0.00013459579, 2.45738706163, 6681.22485339960) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.03197134986, 3.76832042431, 3340.61242669980), + (0.00298033234, 4.10616996305, 6681.22485339960), + (0.00289104742, 0.00000000000, 0.00000000000), + (0.00031365539, 4.44651053090, 10021.83728009940), + (0.00003484100, 4.78812549260, 13362.44970679920) + ]), + _vsop_series_t([ + (0.00217310991, 6.04472194776, 3340.61242669980), + (0.00020976948, 3.14159265359, 0.00000000000), + (0.00012834709, 1.60810667915, 6681.22485339960) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (1.53033488271, 0.00000000000, 0.00000000000), + (0.14184953160, 3.47971283528, 3340.61242669980), + (0.00660776362, 3.81783443019, 6681.22485339960), + (0.00046179117, 4.15595316782, 10021.83728009940), + (0.00008109733, 5.55958416318, 2810.92146160520), + (0.00007485318, 1.77239078402, 5621.84292321040), + (0.00005523191, 1.36436303770, 2281.23049651060), + (0.00003825160, 4.49407183687, 13362.44970679920), + (0.00002306537, 0.09081579001, 2544.31441988340), + (0.00001999396, 5.36059617709, 3337.08930835080), + (0.00002484394, 4.92545639920, 2942.46342329160), + (0.00001960195, 4.74249437639, 3344.13554504880), + (0.00001167119, 2.11260868341, 5092.15195811580), + (0.00001102816, 5.00908403998, 398.14900340820), + (0.00000899066, 4.40791133207, 529.69096509460), + (0.00000992252, 5.83861961952, 6151.53388830500), + (0.00000807354, 2.10217065501, 1059.38193018920), + (0.00000797915, 3.44839203899, 796.29800681640), + (0.00000740975, 1.49906336885, 2146.16541647520) + ]), + _vsop_series_t([ + (0.01107433345, 2.03250524857, 3340.61242669980), + (0.00103175887, 2.37071847807, 6681.22485339960), + (0.00012877200, 0.00000000000, 0.00000000000), + (0.00010815880, 2.70888095665, 10021.83728009940) + ]), + _vsop_series_t([ + (0.00044242249, 0.47930604954, 3340.61242669980), + (0.00008138042, 0.86998389204, 6681.22485339960) + ]) + ]) +), +_vsop_model_t( # Jupiter + _vsop_formula_t([ + _vsop_series_t([ + (0.59954691494, 0.00000000000, 0.00000000000), + (0.09695898719, 5.06191793158, 529.69096509460), + (0.00573610142, 1.44406205629, 7.11354700080), + (0.00306389205, 5.41734730184, 1059.38193018920), + (0.00097178296, 4.14264726552, 632.78373931320), + (0.00072903078, 3.64042916389, 522.57741809380), + (0.00064263975, 3.41145165351, 103.09277421860), + (0.00039806064, 2.29376740788, 419.48464387520), + (0.00038857767, 1.27231755835, 316.39186965660), + (0.00027964629, 1.78454591820, 536.80451209540), + (0.00013589730, 5.77481040790, 1589.07289528380), + (0.00008246349, 3.58227925840, 206.18554843720), + (0.00008768704, 3.63000308199, 949.17560896980), + (0.00007368042, 5.08101194270, 735.87651353180), + (0.00006263150, 0.02497628807, 213.29909543800), + (0.00006114062, 4.51319998626, 1162.47470440780), + (0.00004905396, 1.32084470588, 110.20632121940), + (0.00005305285, 1.30671216791, 14.22709400160), + (0.00005305441, 4.18625634012, 1052.26838318840), + (0.00004647248, 4.69958103684, 3.93215326310), + (0.00003045023, 4.31676431084, 426.59819087600), + (0.00002609999, 1.56667394063, 846.08283475120), + (0.00002028191, 1.06376530715, 3.18139373770), + (0.00001764763, 2.14148655117, 1066.49547719000), + (0.00001722972, 3.88036268267, 1265.56747862640), + (0.00001920945, 0.97168196472, 639.89728631400), + (0.00001633223, 3.58201833555, 515.46387109300), + (0.00001431999, 4.29685556046, 625.67019231240), + (0.00000973272, 4.09764549134, 95.97922721780) + ]), + _vsop_series_t([ + (529.69096508814, 0.00000000000, 0.00000000000), + (0.00489503243, 4.22082939470, 529.69096509460), + (0.00228917222, 6.02646855621, 7.11354700080), + (0.00030099479, 4.54540782858, 1059.38193018920), + (0.00020720920, 5.45943156902, 522.57741809380), + (0.00012103653, 0.16994816098, 536.80451209540), + (0.00006067987, 4.42422292017, 103.09277421860), + (0.00005433968, 3.98480737746, 419.48464387520), + (0.00004237744, 5.89008707199, 14.22709400160) + ]), + _vsop_series_t([ + (0.00047233601, 4.32148536482, 7.11354700080), + (0.00030649436, 2.92977788700, 529.69096509460), + (0.00014837605, 3.14159265359, 0.00000000000) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.02268615702, 3.55852606721, 529.69096509460), + (0.00109971634, 3.90809347197, 1059.38193018920), + (0.00110090358, 0.00000000000, 0.00000000000), + (0.00008101428, 3.60509572885, 522.57741809380), + (0.00006043996, 4.25883108339, 1589.07289528380), + (0.00006437782, 0.30627119215, 536.80451209540) + ]), + _vsop_series_t([ + (0.00078203446, 1.52377859742, 529.69096509460) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (5.20887429326, 0.00000000000, 0.00000000000), + (0.25209327119, 3.49108639871, 529.69096509460), + (0.00610599976, 3.84115365948, 1059.38193018920), + (0.00282029458, 2.57419881293, 632.78373931320), + (0.00187647346, 2.07590383214, 522.57741809380), + (0.00086792905, 0.71001145545, 419.48464387520), + (0.00072062974, 0.21465724607, 536.80451209540), + (0.00065517248, 5.97995884790, 316.39186965660), + (0.00029134542, 1.67759379655, 103.09277421860), + (0.00030135335, 2.16132003734, 949.17560896980), + (0.00023453271, 3.54023522184, 735.87651353180), + (0.00022283743, 4.19362594399, 1589.07289528380), + (0.00023947298, 0.27458037480, 7.11354700080), + (0.00013032614, 2.96042965363, 1162.47470440780), + (0.00009703360, 1.90669633585, 206.18554843720), + (0.00012749023, 2.71550286592, 1052.26838318840), + (0.00007057931, 2.18184839926, 1265.56747862640), + (0.00006137703, 6.26418240033, 846.08283475120), + (0.00002616976, 2.00994012876, 1581.95934828300) + ]), + _vsop_series_t([ + (0.01271801520, 2.64937512894, 529.69096509460), + (0.00061661816, 3.00076460387, 1059.38193018920), + (0.00053443713, 3.89717383175, 522.57741809380), + (0.00031185171, 4.88276958012, 536.80451209540), + (0.00041390269, 0.00000000000, 0.00000000000) + ]) + ]) +), +_vsop_model_t( # Saturn + _vsop_formula_t([ + _vsop_series_t([ + (0.87401354025, 0.00000000000, 0.00000000000), + (0.11107659762, 3.96205090159, 213.29909543800), + (0.01414150957, 4.58581516874, 7.11354700080), + (0.00398379389, 0.52112032699, 206.18554843720), + (0.00350769243, 3.30329907896, 426.59819087600), + (0.00206816305, 0.24658372002, 103.09277421860), + (0.00079271300, 3.84007056878, 220.41264243880), + (0.00023990355, 4.66976924553, 110.20632121940), + (0.00016573588, 0.43719228296, 419.48464387520), + (0.00014906995, 5.76903183869, 316.39186965660), + (0.00015820290, 0.93809155235, 632.78373931320), + (0.00014609559, 1.56518472000, 3.93215326310), + (0.00013160301, 4.44891291899, 14.22709400160), + (0.00015053543, 2.71669915667, 639.89728631400), + (0.00013005299, 5.98119023644, 11.04570026390), + (0.00010725067, 3.12939523827, 202.25339517410), + (0.00005863206, 0.23656938524, 529.69096509460), + (0.00005227757, 4.20783365759, 3.18139373770), + (0.00006126317, 1.76328667907, 277.03499374140), + (0.00005019687, 3.17787728405, 433.71173787680), + (0.00004592550, 0.61977744975, 199.07200143640), + (0.00004005867, 2.24479718502, 63.73589830340), + (0.00002953796, 0.98280366998, 95.97922721780), + (0.00003873670, 3.22283226966, 138.51749687070), + (0.00002461186, 2.03163875071, 735.87651353180), + (0.00003269484, 0.77492638211, 949.17560896980), + (0.00001758145, 3.26580109940, 522.57741809380), + (0.00001640172, 5.50504453050, 846.08283475120), + (0.00001391327, 4.02333150505, 323.50541665740), + (0.00001580648, 4.37265307169, 309.27832265580), + (0.00001123498, 2.83726798446, 415.55249061210), + (0.00001017275, 3.71700135395, 227.52618943960), + (0.00000848642, 3.19150170830, 209.36694217490) + ]), + _vsop_series_t([ + (213.29909521690, 0.00000000000, 0.00000000000), + (0.01297370862, 1.82834923978, 213.29909543800), + (0.00564345393, 2.88499717272, 7.11354700080), + (0.00093734369, 1.06311793502, 426.59819087600), + (0.00107674962, 2.27769131009, 206.18554843720), + (0.00040244455, 2.04108104671, 220.41264243880), + (0.00019941774, 1.27954390470, 103.09277421860), + (0.00010511678, 2.74880342130, 14.22709400160), + (0.00006416106, 0.38238295041, 639.89728631400), + (0.00004848994, 2.43037610229, 419.48464387520), + (0.00004056892, 2.92133209468, 110.20632121940), + (0.00003768635, 3.64965330780, 3.93215326310) + ]), + _vsop_series_t([ + (0.00116441330, 1.17988132879, 7.11354700080), + (0.00091841837, 0.07325195840, 213.29909543800), + (0.00036661728, 0.00000000000, 0.00000000000), + (0.00015274496, 4.06493179167, 206.18554843720) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.04330678039, 3.60284428399, 213.29909543800), + (0.00240348302, 2.85238489373, 426.59819087600), + (0.00084745939, 0.00000000000, 0.00000000000), + (0.00030863357, 3.48441504555, 220.41264243880), + (0.00034116062, 0.57297307557, 206.18554843720), + (0.00014734070, 2.11846596715, 639.89728631400), + (0.00009916667, 5.79003188904, 419.48464387520), + (0.00006993564, 4.73604689720, 7.11354700080), + (0.00004807588, 5.43305312061, 316.39186965660) + ]), + _vsop_series_t([ + (0.00198927992, 4.93901017903, 213.29909543800), + (0.00036947916, 3.14159265359, 0.00000000000), + (0.00017966989, 0.51979431110, 426.59819087600) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (9.55758135486, 0.00000000000, 0.00000000000), + (0.52921382865, 2.39226219573, 213.29909543800), + (0.01873679867, 5.23549604660, 206.18554843720), + (0.01464663929, 1.64763042902, 426.59819087600), + (0.00821891141, 5.93520042303, 316.39186965660), + (0.00547506923, 5.01532618980, 103.09277421860), + (0.00371684650, 2.27114821115, 220.41264243880), + (0.00361778765, 3.13904301847, 7.11354700080), + (0.00140617506, 5.70406606781, 632.78373931320), + (0.00108974848, 3.29313390175, 110.20632121940), + (0.00069006962, 5.94099540992, 419.48464387520), + (0.00061053367, 0.94037691801, 639.89728631400), + (0.00048913294, 1.55733638681, 202.25339517410), + (0.00034143772, 0.19519102597, 277.03499374140), + (0.00032401773, 5.47084567016, 949.17560896980), + (0.00020936596, 0.46349251129, 735.87651353180), + (0.00009796004, 5.20477537945, 1265.56747862640), + (0.00011993338, 5.98050967385, 846.08283475120), + (0.00020839300, 1.52102476129, 433.71173787680), + (0.00015298404, 3.05943814940, 529.69096509460), + (0.00006465823, 0.17732249942, 1052.26838318840), + (0.00011380257, 1.73105427040, 522.57741809380), + (0.00003419618, 4.94550542171, 1581.95934828300) + ]), + _vsop_series_t([ + (0.06182981340, 0.25843511480, 213.29909543800), + (0.00506577242, 0.71114625261, 206.18554843720), + (0.00341394029, 5.79635741658, 426.59819087600), + (0.00188491195, 0.47215589652, 220.41264243880), + (0.00186261486, 3.14159265359, 0.00000000000), + (0.00143891146, 1.40744822888, 7.11354700080) + ]), + _vsop_series_t([ + (0.00436902572, 4.78671677509, 213.29909543800) + ]) + ]) +), +_vsop_model_t( # Uranus + _vsop_formula_t([ + _vsop_series_t([ + (5.48129294297, 0.00000000000, 0.00000000000), + (0.09260408234, 0.89106421507, 74.78159856730), + (0.01504247898, 3.62719260920, 1.48447270830), + (0.00365981674, 1.89962179044, 73.29712585900), + (0.00272328168, 3.35823706307, 149.56319713460), + (0.00070328461, 5.39254450063, 63.73589830340), + (0.00068892678, 6.09292483287, 76.26607127560), + (0.00061998615, 2.26952066061, 2.96894541660), + (0.00061950719, 2.85098872691, 11.04570026390), + (0.00026468770, 3.14152083966, 71.81265315070), + (0.00025710476, 6.11379840493, 454.90936652730), + (0.00021078850, 4.36059339067, 148.07872442630), + (0.00017818647, 1.74436930289, 36.64856292950), + (0.00014613507, 4.73732166022, 3.93215326310), + (0.00011162509, 5.82681796350, 224.34479570190), + (0.00010997910, 0.48865004018, 138.51749687070), + (0.00009527478, 2.95516862826, 35.16409022120), + (0.00007545601, 5.23626582400, 109.94568878850), + (0.00004220241, 3.23328220918, 70.84944530420), + (0.00004051900, 2.27755017300, 151.04766984290), + (0.00003354596, 1.06549007380, 4.45341812490), + (0.00002926718, 4.62903718891, 9.56122755560), + (0.00003490340, 5.48306144511, 146.59425171800), + (0.00003144069, 4.75199570434, 77.75054398390), + (0.00002922333, 5.35235361027, 85.82729883120), + (0.00002272788, 4.36600400036, 70.32818044240), + (0.00002051219, 1.51773566586, 0.11187458460), + (0.00002148602, 0.60745949945, 38.13303563780), + (0.00001991643, 4.92437588682, 277.03499374140), + (0.00001376226, 2.04283539351, 65.22037101170), + (0.00001666902, 3.62744066769, 380.12776796000), + (0.00001284107, 3.11347961505, 202.25339517410), + (0.00001150429, 0.93343589092, 3.18139373770), + (0.00001533221, 2.58594681212, 52.69019803950), + (0.00001281604, 0.54271272721, 222.86032299360), + (0.00001372139, 4.19641530878, 111.43016149680), + (0.00001221029, 0.19900650030, 108.46121608020), + (0.00000946181, 1.19253165736, 127.47179660680), + (0.00001150989, 4.17898916639, 33.67961751290) + ]), + _vsop_series_t([ + (74.78159860910, 0.00000000000, 0.00000000000), + (0.00154332863, 5.24158770553, 74.78159856730), + (0.00024456474, 1.71260334156, 1.48447270830), + (0.00009258442, 0.42829732350, 11.04570026390), + (0.00008265977, 1.50218091379, 63.73589830340), + (0.00009150160, 1.41213765216, 149.56319713460) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.01346277648, 2.61877810547, 74.78159856730), + (0.00062341400, 5.08111189648, 149.56319713460), + (0.00061601196, 3.14159265359, 0.00000000000), + (0.00009963722, 1.61603805646, 76.26607127560), + (0.00009926160, 0.57630380333, 73.29712585900) + ]), + _vsop_series_t([ + (0.00034101978, 0.01321929936, 74.78159856730) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (19.21264847206, 0.00000000000, 0.00000000000), + (0.88784984413, 5.60377527014, 74.78159856730), + (0.03440836062, 0.32836099706, 73.29712585900), + (0.02055653860, 1.78295159330, 149.56319713460), + (0.00649322410, 4.52247285911, 76.26607127560), + (0.00602247865, 3.86003823674, 63.73589830340), + (0.00496404167, 1.40139935333, 454.90936652730), + (0.00338525369, 1.58002770318, 138.51749687070), + (0.00243509114, 1.57086606044, 71.81265315070), + (0.00190522303, 1.99809394714, 1.48447270830), + (0.00161858838, 2.79137786799, 148.07872442630), + (0.00143706183, 1.38368544947, 11.04570026390), + (0.00093192405, 0.17437220467, 36.64856292950), + (0.00071424548, 4.24509236074, 224.34479570190), + (0.00089806014, 3.66105364565, 109.94568878850), + (0.00039009723, 1.66971401684, 70.84944530420), + (0.00046677296, 1.39976401694, 35.16409022120), + (0.00039025624, 3.36234773834, 277.03499374140), + (0.00036755274, 3.88649278513, 146.59425171800), + (0.00030348723, 0.70100838798, 151.04766984290), + (0.00029156413, 3.18056336700, 77.75054398390), + (0.00022637073, 0.72518687029, 529.69096509460), + (0.00011959076, 1.75043392140, 984.60033162190), + (0.00025620756, 5.25656086672, 380.12776796000) + ]), + _vsop_series_t([ + (0.01479896629, 3.67205697578, 74.78159856730) + ]) + ]) +), +_vsop_model_t( # Neptune + _vsop_formula_t([ + _vsop_series_t([ + (5.31188633046, 0.00000000000, 0.00000000000), + (0.01798475530, 2.90101273890, 38.13303563780), + (0.01019727652, 0.48580922867, 1.48447270830), + (0.00124531845, 4.83008090676, 36.64856292950), + (0.00042064466, 5.41054993053, 2.96894541660), + (0.00037714584, 6.09221808686, 35.16409022120), + (0.00033784738, 1.24488874087, 76.26607127560), + (0.00016482741, 0.00007727998, 491.55792945680), + (0.00009198584, 4.93747051954, 39.61750834610), + (0.00008994250, 0.27462171806, 175.16605980020) + ]), + _vsop_series_t([ + (38.13303563957, 0.00000000000, 0.00000000000), + (0.00016604172, 4.86323329249, 1.48447270830), + (0.00015744045, 2.27887427527, 38.13303563780) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.03088622933, 1.44104372644, 38.13303563780), + (0.00027780087, 5.91271884599, 76.26607127560), + (0.00027623609, 0.00000000000, 0.00000000000), + (0.00015355489, 2.52123799551, 36.64856292950), + (0.00015448133, 3.50877079215, 39.61750834610) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (30.07013205828, 0.00000000000, 0.00000000000), + (0.27062259632, 1.32999459377, 38.13303563780), + (0.01691764014, 3.25186135653, 36.64856292950), + (0.00807830553, 5.18592878704, 1.48447270830), + (0.00537760510, 4.52113935896, 35.16409022120), + (0.00495725141, 1.57105641650, 491.55792945680), + (0.00274571975, 1.84552258866, 175.16605980020), + (0.00012012320, 1.92059384991, 1021.24889455140), + (0.00121801746, 5.79754470298, 76.26607127560), + (0.00100896068, 0.37702724930, 73.29712585900), + (0.00135134092, 3.37220609835, 39.61750834610), + (0.00007571796, 1.07149207335, 388.46515523820) + ]) + ]) +), ] -def _VsopFormula(formula: List[List[List[float]]], t: float, clamp_angle: bool) -> float: +def _VsopFormula(formula: _vsop_formula_t, t: float, clamp_angle: bool) -> float: tpower = 1.0 coord = 0.0 - for series in formula: - incr = tpower * sum(A * math.cos(B + C*t) for (A, B, C) in series) + for series in formula.seriesList: + incr = tpower * sum((ampl * math.cos(phas + freq*t)) for (ampl, phas, freq) in series.termList) if clamp_angle: # Longitude angles can be hundreds of radians. # Improve precision by keeping each increment within [-2*pi, +2*pi]. @@ -3085,15 +3075,15 @@ def _VsopFormula(formula: List[List[List[float]]], t: float, clamp_angle: bool) tpower *= t return coord -def _VsopDeriv(formula: List[List[List[float]]], t: float) -> float: +def _VsopDeriv(formula: _vsop_formula_t, t: float) -> float: tpower = 1.0 # t**s dpower = 0.0 # t**(s-1) deriv = 0.0 s = 0 - for series in formula: + for series in formula.seriesList: sin_sum = 0.0 cos_sum = 0.0 - for (ampl, phas, freq) in series: + for (ampl, phas, freq) in series.termList: angle = phas + (t * freq) sin_sum += ampl * freq * math.sin(angle) if s > 0: @@ -3122,11 +3112,11 @@ def _VsopSphereToRect(lon: float, lat: float, rad: float) -> "_TerseVector": rad * math.sin(lat) ) -def _CalcVsop(model: List[List[List[List[float]]]], time: Time) -> Vector: +def _CalcVsop(model: _vsop_model_t, time: Time) -> Vector: t = time.tt / _DAYS_PER_MILLENNIUM - lon = _VsopFormula(model[0], t, True) - lat = _VsopFormula(model[1], t, False) - rad = _VsopFormula(model[2], t, False) + lon = _VsopFormula(model.lon, t, True) + lat = _VsopFormula(model.lat, t, False) + rad = _VsopFormula(model.rad, t, False) eclip = _VsopSphereToRect(lon, lat, rad) return _VsopRotate(eclip).ToAstroVector(time) @@ -3143,14 +3133,16 @@ class _body_state_t: def __sub__(self, other: "_body_state_t") -> "_body_state_t": return _body_state_t(self.tt, self.r - other.r, self.v - other.v) -def _CalcVsopPosVel(model: List[List[List[List[float]]]], tt: float) -> _body_state_t: +def _CalcVsopPosVel(model: _vsop_model_t, tt: float) -> _body_state_t: t = tt / _DAYS_PER_MILLENNIUM - lon = _VsopFormula(model[0], t, True) - lat = _VsopFormula(model[1], t, False) - rad = _VsopFormula(model[2], t, False) + lon = _VsopFormula(model.lon, t, True) + lat = _VsopFormula(model.lat, t, False) + rad = _VsopFormula(model.rad, t, False) - (dlon_dt, dlat_dt, drad_dt) = [_VsopDeriv(formula, t) for formula in model] + dlon_dt = _VsopDeriv(model.lon, t) + dlat_dt = _VsopDeriv(model.lat, t) + drad_dt = _VsopDeriv(model.rad, t) # Use spherical coords and spherical derivatives to calculate # the velocity vector in rectangular coordinates. @@ -3205,11 +3197,11 @@ def _CalcSolarSystemBarycenter(time: Time) -> Vector: return ssb -def _VsopHelioDistance(model: List[List[List[List[float]]]], time: Time) -> float: +def _VsopHelioDistance(model: _vsop_model_t, time: Time) -> float: # The caller only wants to know the distance between the planet and the Sun. # So we only need to calculate the radial component of the spherical coordinates. # There is no need to translate coordinates. - return _VsopFormula(model[2], time.tt / _DAYS_PER_MILLENNIUM, False) + return _VsopFormula(model.rad, time.tt / _DAYS_PER_MILLENNIUM, False) def _CalcEarth(time: Time) -> Vector: return _CalcVsop(_vsop[Body.Earth.value], time) diff --git a/generate/codegen.c b/generate/codegen.c index 1cccd6f5..11aa7ce5 100644 --- a/generate/codegen.c +++ b/generate/codegen.c @@ -272,6 +272,64 @@ fail: return error; } + +static int PythonVsop(cg_context_t *context) +{ + int error; + const char *name; + vsop_body_t body; + vsop_model_t model; + int check_length; + int k, s, i; + char filename[100]; + + VsopInit(&model); + + name = context->args; + error = ParseVsopBodyName(context, name, &body); + if (error) goto fail; + + check_length = snprintf(filename, sizeof(filename), "%s/vsop_%d.txt", context->datapath, (int)body); + if (check_length < 0 || check_length != (int)strlen(filename)) + { + error = LogError(context, "VSOP model filename is too long!"); + goto fail; + } + + error = VsopReadTrunc(&model, filename); + if (error) goto fail; + + fprintf(context->outfile, "_vsop_model_t( # %s\n", name); + for (k=0; k < model.ncoords; ++k) + { + const vsop_formula_t *formula = &model.formula[k]; + + fprintf(context->outfile, " _vsop_formula_t([\n"); + for (s=0; s < formula->nseries_total; ++s) + { + const vsop_series_t *series = &formula->series[s]; + fprintf(context->outfile, " _vsop_series_t([\n"); + for (i=0; i < series->nterms_total; ++i) + { + const vsop_term_t *term = &series->term[i]; + fprintf(context->outfile, " (%0.11lf, %0.11lf, %0.11lf)%s\n", + term->amplitude, + term->phase, + term->frequency, + (i+1 < series->nterms_total) ? "," : ""); + } + fprintf(context->outfile, " ])%s\n", (s+1 < formula->nseries_total) ? "," : ""); + } + fprintf(context->outfile, " ])%s\n", (k+1 < model.ncoords) ? "," : ""); + } + fprintf(context->outfile, ")"); + +fail: + VsopFreeModel(&model); + return error; +} + + static int CVsop_Series(cg_context_t *context, const vsop_series_t *series, const char *varprefix, int s) { int i; @@ -2107,6 +2165,7 @@ static const cg_directive_entry DirectiveTable[] = { "CSHARP_VSOP", CsharpVsop }, { "KOTLIN_VSOP", KotlinVsop }, { "LIST_VSOP", ListVsop }, + { "PYTHON_VSOP", PythonVsop }, { "IAU_DATA", OptIauData }, { "ADDSOL", OptAddSol }, { "CONSTEL", ConstellationData }, diff --git a/generate/template/astronomy.py b/generate/template/astronomy.py index fede1b5f..fe0b0d55 100644 --- a/generate/template/astronomy.py +++ b/generate/template/astronomy.py @@ -1722,46 +1722,36 @@ def GeoEmbState(time: Time) -> StateVector: #---------------------------------------------------------------------------- # BEGIN VSOP -# The list of list of list of list of list of floats in _vsop gets confusing! -# Here is the cheat sheet: -# _vsop [body_index] [model] [formula] [series] [coord] -# body_index: 0=Mercury, 1=Venus, ..., 7=Neptune. -# model: 0=longitude, 1=latitude, 2=radius -# formula: a list of series for each power of t -# series: a trigonometric series for a particular power of t -# coord: a list of exactly 3 floats [A, B, C] defining the trig term (A * cos(B + C*t)). +class _vsop_series_t: + def __init__(self, termList: List[Tuple[float, float, float]]) -> None: + self.termList = termList -_vsop: List[List[List[List[List[float]]]]] = [ - # Mercury - $ASTRO_LIST_VSOP(Mercury), +class _vsop_formula_t: + def __init__(self, seriesList: List[_vsop_series_t]) -> None: + self.seriesList = seriesList - # Venus - $ASTRO_LIST_VSOP(Venus), +class _vsop_model_t: + def __init__(self, lon: _vsop_formula_t, lat: _vsop_formula_t, rad: _vsop_formula_t) -> None: + self.lon = lon + self.lat = lat + self.rad = rad - # Earth - $ASTRO_LIST_VSOP(Earth), - - # Mars - $ASTRO_LIST_VSOP(Mars), - - # Jupiter - $ASTRO_LIST_VSOP(Jupiter), - - # Saturn - $ASTRO_LIST_VSOP(Saturn), - - # Uranus - $ASTRO_LIST_VSOP(Uranus), - - # Neptune - $ASTRO_LIST_VSOP(Neptune), +_vsop: List[_vsop_model_t] = [ +$ASTRO_PYTHON_VSOP(Mercury), +$ASTRO_PYTHON_VSOP(Venus), +$ASTRO_PYTHON_VSOP(Earth), +$ASTRO_PYTHON_VSOP(Mars), +$ASTRO_PYTHON_VSOP(Jupiter), +$ASTRO_PYTHON_VSOP(Saturn), +$ASTRO_PYTHON_VSOP(Uranus), +$ASTRO_PYTHON_VSOP(Neptune), ] -def _VsopFormula(formula: List[List[List[float]]], t: float, clamp_angle: bool) -> float: +def _VsopFormula(formula: _vsop_formula_t, t: float, clamp_angle: bool) -> float: tpower = 1.0 coord = 0.0 - for series in formula: - incr = tpower * sum(A * math.cos(B + C*t) for (A, B, C) in series) + for series in formula.seriesList: + incr = tpower * sum((ampl * math.cos(phas + freq*t)) for (ampl, phas, freq) in series.termList) if clamp_angle: # Longitude angles can be hundreds of radians. # Improve precision by keeping each increment within [-2*pi, +2*pi]. @@ -1770,15 +1760,15 @@ def _VsopFormula(formula: List[List[List[float]]], t: float, clamp_angle: bool) tpower *= t return coord -def _VsopDeriv(formula: List[List[List[float]]], t: float) -> float: +def _VsopDeriv(formula: _vsop_formula_t, t: float) -> float: tpower = 1.0 # t**s dpower = 0.0 # t**(s-1) deriv = 0.0 s = 0 - for series in formula: + for series in formula.seriesList: sin_sum = 0.0 cos_sum = 0.0 - for (ampl, phas, freq) in series: + for (ampl, phas, freq) in series.termList: angle = phas + (t * freq) sin_sum += ampl * freq * math.sin(angle) if s > 0: @@ -1807,11 +1797,11 @@ def _VsopSphereToRect(lon: float, lat: float, rad: float) -> "_TerseVector": rad * math.sin(lat) ) -def _CalcVsop(model: List[List[List[List[float]]]], time: Time) -> Vector: +def _CalcVsop(model: _vsop_model_t, time: Time) -> Vector: t = time.tt / _DAYS_PER_MILLENNIUM - lon = _VsopFormula(model[0], t, True) - lat = _VsopFormula(model[1], t, False) - rad = _VsopFormula(model[2], t, False) + lon = _VsopFormula(model.lon, t, True) + lat = _VsopFormula(model.lat, t, False) + rad = _VsopFormula(model.rad, t, False) eclip = _VsopSphereToRect(lon, lat, rad) return _VsopRotate(eclip).ToAstroVector(time) @@ -1828,14 +1818,16 @@ class _body_state_t: def __sub__(self, other: "_body_state_t") -> "_body_state_t": return _body_state_t(self.tt, self.r - other.r, self.v - other.v) -def _CalcVsopPosVel(model: List[List[List[List[float]]]], tt: float) -> _body_state_t: +def _CalcVsopPosVel(model: _vsop_model_t, tt: float) -> _body_state_t: t = tt / _DAYS_PER_MILLENNIUM - lon = _VsopFormula(model[0], t, True) - lat = _VsopFormula(model[1], t, False) - rad = _VsopFormula(model[2], t, False) + lon = _VsopFormula(model.lon, t, True) + lat = _VsopFormula(model.lat, t, False) + rad = _VsopFormula(model.rad, t, False) - (dlon_dt, dlat_dt, drad_dt) = [_VsopDeriv(formula, t) for formula in model] + dlon_dt = _VsopDeriv(model.lon, t) + dlat_dt = _VsopDeriv(model.lat, t) + drad_dt = _VsopDeriv(model.rad, t) # Use spherical coords and spherical derivatives to calculate # the velocity vector in rectangular coordinates. @@ -1890,11 +1882,11 @@ def _CalcSolarSystemBarycenter(time: Time) -> Vector: return ssb -def _VsopHelioDistance(model: List[List[List[List[float]]]], time: Time) -> float: +def _VsopHelioDistance(model: _vsop_model_t, time: Time) -> float: # The caller only wants to know the distance between the planet and the Sun. # So we only need to calculate the radial component of the spherical coordinates. # There is no need to translate coordinates. - return _VsopFormula(model[2], time.tt / _DAYS_PER_MILLENNIUM, False) + return _VsopFormula(model.rad, time.tt / _DAYS_PER_MILLENNIUM, False) def _CalcEarth(time: Time) -> Vector: return _CalcVsop(_vsop[Body.Earth.value], time) diff --git a/source/python/astronomy/astronomy.py b/source/python/astronomy/astronomy.py index e6cc3870..3b999760 100644 --- a/source/python/astronomy/astronomy.py +++ b/source/python/astronomy/astronomy.py @@ -2409,674 +2409,664 @@ def GeoEmbState(time: Time) -> StateVector: #---------------------------------------------------------------------------- # BEGIN VSOP -# The list of list of list of list of list of floats in _vsop gets confusing! -# Here is the cheat sheet: -# _vsop [body_index] [model] [formula] [series] [coord] -# body_index: 0=Mercury, 1=Venus, ..., 7=Neptune. -# model: 0=longitude, 1=latitude, 2=radius -# formula: a list of series for each power of t -# series: a trigonometric series for a particular power of t -# coord: a list of exactly 3 floats [A, B, C] defining the trig term (A * cos(B + C*t)). +class _vsop_series_t: + def __init__(self, termList: List[Tuple[float, float, float]]) -> None: + self.termList = termList -_vsop: List[List[List[List[List[float]]]]] = [ - # Mercury - [ - [ - [ - [4.40250710144, 0.00000000000, 0.00000000000], - [0.40989414977, 1.48302034195, 26087.90314157420], - [0.05046294200, 4.47785489551, 52175.80628314840], - [0.00855346844, 1.16520322459, 78263.70942472259], - [0.00165590362, 4.11969163423, 104351.61256629678], - [0.00034561897, 0.77930768443, 130439.51570787099], - [0.00007583476, 3.71348404924, 156527.41884944518] - ], - [ - [26087.90313685529, 0.00000000000, 0.00000000000], - [0.01131199811, 6.21874197797, 26087.90314157420], - [0.00292242298, 3.04449355541, 52175.80628314840], - [0.00075775081, 6.08568821653, 78263.70942472259], - [0.00019676525, 2.80965111777, 104351.61256629678] - ] - ], - [ - [ - [0.11737528961, 1.98357498767, 26087.90314157420], - [0.02388076996, 5.03738959686, 52175.80628314840], - [0.01222839532, 3.14159265359, 0.00000000000], - [0.00543251810, 1.79644363964, 78263.70942472259], - [0.00129778770, 4.83232503958, 104351.61256629678], - [0.00031866927, 1.58088495658, 130439.51570787099], - [0.00007963301, 4.60972126127, 156527.41884944518] - ], - [ - [0.00274646065, 3.95008450011, 26087.90314157420], - [0.00099737713, 3.14159265359, 0.00000000000] - ] - ], - [ - [ - [0.39528271651, 0.00000000000, 0.00000000000], - [0.07834131818, 6.19233722598, 26087.90314157420], - [0.00795525558, 2.95989690104, 52175.80628314840], - [0.00121281764, 6.01064153797, 78263.70942472259], - [0.00021921969, 2.77820093972, 104351.61256629678], - [0.00004354065, 5.82894543774, 130439.51570787099] - ], - [ - [0.00217347740, 4.65617158665, 26087.90314157420], - [0.00044141826, 1.42385544001, 52175.80628314840] - ] - ] -], +class _vsop_formula_t: + def __init__(self, seriesList: List[_vsop_series_t]) -> None: + self.seriesList = seriesList - # Venus - [ - [ - [ - [3.17614666774, 0.00000000000, 0.00000000000], - [0.01353968419, 5.59313319619, 10213.28554621100], - [0.00089891645, 5.30650047764, 20426.57109242200], - [0.00005477194, 4.41630661466, 7860.41939243920], - [0.00003455741, 2.69964447820, 11790.62908865880], - [0.00002372061, 2.99377542079, 3930.20969621960], - [0.00001317168, 5.18668228402, 26.29831979980], - [0.00001664146, 4.25018630147, 1577.34354244780], - [0.00001438387, 4.15745084182, 9683.59458111640], - [0.00001200521, 6.15357116043, 30639.85663863300] - ], - [ - [10213.28554621638, 0.00000000000, 0.00000000000], - [0.00095617813, 2.46406511110, 10213.28554621100], - [0.00007787201, 0.62478482220, 20426.57109242200] - ] - ], - [ - [ - [0.05923638472, 0.26702775812, 10213.28554621100], - [0.00040107978, 1.14737178112, 20426.57109242200], - [0.00032814918, 3.14159265359, 0.00000000000] - ], - [ - [0.00287821243, 1.88964962838, 10213.28554621100] - ] - ], - [ - [ - [0.72334820891, 0.00000000000, 0.00000000000], - [0.00489824182, 4.02151831717, 10213.28554621100], - [0.00001658058, 4.90206728031, 20426.57109242200], - [0.00001378043, 1.12846591367, 11790.62908865880], - [0.00001632096, 2.84548795207, 7860.41939243920], - [0.00000498395, 2.58682193892, 9683.59458111640], - [0.00000221985, 2.01346696541, 19367.18916223280], - [0.00000237454, 2.55136053886, 15720.83878487840] - ], - [ - [0.00034551041, 0.89198706276, 10213.28554621100] - ] - ] -], +class _vsop_model_t: + def __init__(self, lon: _vsop_formula_t, lat: _vsop_formula_t, rad: _vsop_formula_t) -> None: + self.lon = lon + self.lat = lat + self.rad = rad - # Earth - [ - [ - [ - [1.75347045673, 0.00000000000, 0.00000000000], - [0.03341656453, 4.66925680415, 6283.07584999140], - [0.00034894275, 4.62610242189, 12566.15169998280], - [0.00003417572, 2.82886579754, 3.52311834900], - [0.00003497056, 2.74411783405, 5753.38488489680], - [0.00003135899, 3.62767041756, 77713.77146812050], - [0.00002676218, 4.41808345438, 7860.41939243920], - [0.00002342691, 6.13516214446, 3930.20969621960], - [0.00001273165, 2.03709657878, 529.69096509460], - [0.00001324294, 0.74246341673, 11506.76976979360], - [0.00000901854, 2.04505446477, 26.29831979980], - [0.00001199167, 1.10962946234, 1577.34354244780], - [0.00000857223, 3.50849152283, 398.14900340820], - [0.00000779786, 1.17882681962, 5223.69391980220], - [0.00000990250, 5.23268072088, 5884.92684658320], - [0.00000753141, 2.53339052847, 5507.55323866740], - [0.00000505267, 4.58292599973, 18849.22754997420], - [0.00000492392, 4.20505711826, 775.52261132400], - [0.00000356672, 2.91954114478, 0.06731030280], - [0.00000284125, 1.89869240932, 796.29800681640], - [0.00000242879, 0.34481445893, 5486.77784317500], - [0.00000317087, 5.84901948512, 11790.62908865880], - [0.00000271112, 0.31486255375, 10977.07880469900], - [0.00000206217, 4.80646631478, 2544.31441988340], - [0.00000205478, 1.86953770281, 5573.14280143310], - [0.00000202318, 2.45767790232, 6069.77675455340], - [0.00000126225, 1.08295459501, 20.77539549240], - [0.00000155516, 0.83306084617, 213.29909543800] - ], - [ - [6283.07584999140, 0.00000000000, 0.00000000000], - [0.00206058863, 2.67823455808, 6283.07584999140], - [0.00004303419, 2.63512233481, 12566.15169998280] - ], - [ - [0.00008721859, 1.07253635559, 6283.07584999140] - ] - ], - [ - [ - ], - [ - [0.00227777722, 3.41376620530, 6283.07584999140], - [0.00003805678, 3.37063423795, 12566.15169998280] - ] - ], - [ - [ - [1.00013988784, 0.00000000000, 0.00000000000], - [0.01670699632, 3.09846350258, 6283.07584999140], - [0.00013956024, 3.05524609456, 12566.15169998280], - [0.00003083720, 5.19846674381, 77713.77146812050], - [0.00001628463, 1.17387558054, 5753.38488489680], - [0.00001575572, 2.84685214877, 7860.41939243920], - [0.00000924799, 5.45292236722, 11506.76976979360], - [0.00000542439, 4.56409151453, 3930.20969621960], - [0.00000472110, 3.66100022149, 5884.92684658320], - [0.00000085831, 1.27079125277, 161000.68573767410], - [0.00000057056, 2.01374292245, 83996.84731811189], - [0.00000055736, 5.24159799170, 71430.69561812909], - [0.00000174844, 3.01193636733, 18849.22754997420], - [0.00000243181, 4.27349530790, 11790.62908865880] - ], - [ - [0.00103018607, 1.10748968172, 6283.07584999140], - [0.00001721238, 1.06442300386, 12566.15169998280] - ], - [ - [0.00004359385, 5.78455133808, 6283.07584999140] - ] - ] -], - - # Mars - [ - [ - [ - [6.20347711581, 0.00000000000, 0.00000000000], - [0.18656368093, 5.05037100270, 3340.61242669980], - [0.01108216816, 5.40099836344, 6681.22485339960], - [0.00091798406, 5.75478744667, 10021.83728009940], - [0.00027744987, 5.97049513147, 3.52311834900], - [0.00010610235, 2.93958560338, 2281.23049651060], - [0.00012315897, 0.84956094002, 2810.92146160520], - [0.00008926784, 4.15697846427, 0.01725365220], - [0.00008715691, 6.11005153139, 13362.44970679920], - [0.00006797556, 0.36462229657, 398.14900340820], - [0.00007774872, 3.33968761376, 5621.84292321040], - [0.00003575078, 1.66186505710, 2544.31441988340], - [0.00004161108, 0.22814971327, 2942.46342329160], - [0.00003075252, 0.85696614132, 191.44826611160], - [0.00002628117, 0.64806124465, 3337.08930835080], - [0.00002937546, 6.07893711402, 0.06731030280], - [0.00002389414, 5.03896442664, 796.29800681640], - [0.00002579844, 0.02996736156, 3344.13554504880], - [0.00001528141, 1.14979301996, 6151.53388830500], - [0.00001798806, 0.65634057445, 529.69096509460], - [0.00001264357, 3.62275122593, 5092.15195811580], - [0.00001286228, 3.06796065034, 2146.16541647520], - [0.00001546404, 2.91579701718, 1751.53953141600], - [0.00001024902, 3.69334099279, 8962.45534991020], - [0.00000891566, 0.18293837498, 16703.06213349900], - [0.00000858759, 2.40093811940, 2914.01423582380], - [0.00000832715, 2.46418619474, 3340.59517304760], - [0.00000832720, 4.49495782139, 3340.62968035200], - [0.00000712902, 3.66335473479, 1059.38193018920], - [0.00000748723, 3.82248614017, 155.42039943420], - [0.00000723861, 0.67497311481, 3738.76143010800], - [0.00000635548, 2.92182225127, 8432.76438481560], - [0.00000655162, 0.48864064125, 3127.31333126180], - [0.00000550474, 3.81001042328, 0.98032106820], - [0.00000552750, 4.47479317037, 1748.01641306700], - [0.00000425966, 0.55364317304, 6283.07584999140], - [0.00000415131, 0.49662285038, 213.29909543800], - [0.00000472167, 3.62547124025, 1194.44701022460], - [0.00000306551, 0.38052848348, 6684.74797174860], - [0.00000312141, 0.99853944405, 6677.70173505060], - [0.00000293198, 4.22131299634, 20.77539549240], - [0.00000302375, 4.48618007156, 3532.06069281140], - [0.00000274027, 0.54222167059, 3340.54511639700], - [0.00000281079, 5.88163521788, 1349.86740965880], - [0.00000231183, 1.28242156993, 3870.30339179440], - [0.00000283602, 5.76885434940, 3149.16416058820], - [0.00000236117, 5.75503217933, 3333.49887969900], - [0.00000274033, 0.13372524985, 3340.67973700260], - [0.00000299395, 2.78323740866, 6254.62666252360] - ], - [ - [3340.61242700512, 0.00000000000, 0.00000000000], - [0.01457554523, 3.60433733236, 3340.61242669980], - [0.00168414711, 3.92318567804, 6681.22485339960], - [0.00020622975, 4.26108844583, 10021.83728009940], - [0.00003452392, 4.73210393190, 3.52311834900], - [0.00002586332, 4.60670058555, 13362.44970679920], - [0.00000841535, 4.45864030426, 2281.23049651060] - ], - [ - [0.00058152577, 2.04961712429, 3340.61242669980], - [0.00013459579, 2.45738706163, 6681.22485339960] - ] - ], - [ - [ - [0.03197134986, 3.76832042431, 3340.61242669980], - [0.00298033234, 4.10616996305, 6681.22485339960], - [0.00289104742, 0.00000000000, 0.00000000000], - [0.00031365539, 4.44651053090, 10021.83728009940], - [0.00003484100, 4.78812549260, 13362.44970679920] - ], - [ - [0.00217310991, 6.04472194776, 3340.61242669980], - [0.00020976948, 3.14159265359, 0.00000000000], - [0.00012834709, 1.60810667915, 6681.22485339960] - ] - ], - [ - [ - [1.53033488271, 0.00000000000, 0.00000000000], - [0.14184953160, 3.47971283528, 3340.61242669980], - [0.00660776362, 3.81783443019, 6681.22485339960], - [0.00046179117, 4.15595316782, 10021.83728009940], - [0.00008109733, 5.55958416318, 2810.92146160520], - [0.00007485318, 1.77239078402, 5621.84292321040], - [0.00005523191, 1.36436303770, 2281.23049651060], - [0.00003825160, 4.49407183687, 13362.44970679920], - [0.00002306537, 0.09081579001, 2544.31441988340], - [0.00001999396, 5.36059617709, 3337.08930835080], - [0.00002484394, 4.92545639920, 2942.46342329160], - [0.00001960195, 4.74249437639, 3344.13554504880], - [0.00001167119, 2.11260868341, 5092.15195811580], - [0.00001102816, 5.00908403998, 398.14900340820], - [0.00000899066, 4.40791133207, 529.69096509460], - [0.00000992252, 5.83861961952, 6151.53388830500], - [0.00000807354, 2.10217065501, 1059.38193018920], - [0.00000797915, 3.44839203899, 796.29800681640], - [0.00000740975, 1.49906336885, 2146.16541647520] - ], - [ - [0.01107433345, 2.03250524857, 3340.61242669980], - [0.00103175887, 2.37071847807, 6681.22485339960], - [0.00012877200, 0.00000000000, 0.00000000000], - [0.00010815880, 2.70888095665, 10021.83728009940] - ], - [ - [0.00044242249, 0.47930604954, 3340.61242669980], - [0.00008138042, 0.86998389204, 6681.22485339960] - ] - ] -], - - # Jupiter - [ - [ - [ - [0.59954691494, 0.00000000000, 0.00000000000], - [0.09695898719, 5.06191793158, 529.69096509460], - [0.00573610142, 1.44406205629, 7.11354700080], - [0.00306389205, 5.41734730184, 1059.38193018920], - [0.00097178296, 4.14264726552, 632.78373931320], - [0.00072903078, 3.64042916389, 522.57741809380], - [0.00064263975, 3.41145165351, 103.09277421860], - [0.00039806064, 2.29376740788, 419.48464387520], - [0.00038857767, 1.27231755835, 316.39186965660], - [0.00027964629, 1.78454591820, 536.80451209540], - [0.00013589730, 5.77481040790, 1589.07289528380], - [0.00008246349, 3.58227925840, 206.18554843720], - [0.00008768704, 3.63000308199, 949.17560896980], - [0.00007368042, 5.08101194270, 735.87651353180], - [0.00006263150, 0.02497628807, 213.29909543800], - [0.00006114062, 4.51319998626, 1162.47470440780], - [0.00004905396, 1.32084470588, 110.20632121940], - [0.00005305285, 1.30671216791, 14.22709400160], - [0.00005305441, 4.18625634012, 1052.26838318840], - [0.00004647248, 4.69958103684, 3.93215326310], - [0.00003045023, 4.31676431084, 426.59819087600], - [0.00002609999, 1.56667394063, 846.08283475120], - [0.00002028191, 1.06376530715, 3.18139373770], - [0.00001764763, 2.14148655117, 1066.49547719000], - [0.00001722972, 3.88036268267, 1265.56747862640], - [0.00001920945, 0.97168196472, 639.89728631400], - [0.00001633223, 3.58201833555, 515.46387109300], - [0.00001431999, 4.29685556046, 625.67019231240], - [0.00000973272, 4.09764549134, 95.97922721780] - ], - [ - [529.69096508814, 0.00000000000, 0.00000000000], - [0.00489503243, 4.22082939470, 529.69096509460], - [0.00228917222, 6.02646855621, 7.11354700080], - [0.00030099479, 4.54540782858, 1059.38193018920], - [0.00020720920, 5.45943156902, 522.57741809380], - [0.00012103653, 0.16994816098, 536.80451209540], - [0.00006067987, 4.42422292017, 103.09277421860], - [0.00005433968, 3.98480737746, 419.48464387520], - [0.00004237744, 5.89008707199, 14.22709400160] - ], - [ - [0.00047233601, 4.32148536482, 7.11354700080], - [0.00030649436, 2.92977788700, 529.69096509460], - [0.00014837605, 3.14159265359, 0.00000000000] - ] - ], - [ - [ - [0.02268615702, 3.55852606721, 529.69096509460], - [0.00109971634, 3.90809347197, 1059.38193018920], - [0.00110090358, 0.00000000000, 0.00000000000], - [0.00008101428, 3.60509572885, 522.57741809380], - [0.00006043996, 4.25883108339, 1589.07289528380], - [0.00006437782, 0.30627119215, 536.80451209540] - ], - [ - [0.00078203446, 1.52377859742, 529.69096509460] - ] - ], - [ - [ - [5.20887429326, 0.00000000000, 0.00000000000], - [0.25209327119, 3.49108639871, 529.69096509460], - [0.00610599976, 3.84115365948, 1059.38193018920], - [0.00282029458, 2.57419881293, 632.78373931320], - [0.00187647346, 2.07590383214, 522.57741809380], - [0.00086792905, 0.71001145545, 419.48464387520], - [0.00072062974, 0.21465724607, 536.80451209540], - [0.00065517248, 5.97995884790, 316.39186965660], - [0.00029134542, 1.67759379655, 103.09277421860], - [0.00030135335, 2.16132003734, 949.17560896980], - [0.00023453271, 3.54023522184, 735.87651353180], - [0.00022283743, 4.19362594399, 1589.07289528380], - [0.00023947298, 0.27458037480, 7.11354700080], - [0.00013032614, 2.96042965363, 1162.47470440780], - [0.00009703360, 1.90669633585, 206.18554843720], - [0.00012749023, 2.71550286592, 1052.26838318840], - [0.00007057931, 2.18184839926, 1265.56747862640], - [0.00006137703, 6.26418240033, 846.08283475120], - [0.00002616976, 2.00994012876, 1581.95934828300] - ], - [ - [0.01271801520, 2.64937512894, 529.69096509460], - [0.00061661816, 3.00076460387, 1059.38193018920], - [0.00053443713, 3.89717383175, 522.57741809380], - [0.00031185171, 4.88276958012, 536.80451209540], - [0.00041390269, 0.00000000000, 0.00000000000] - ] - ] -], - - # Saturn - [ - [ - [ - [0.87401354025, 0.00000000000, 0.00000000000], - [0.11107659762, 3.96205090159, 213.29909543800], - [0.01414150957, 4.58581516874, 7.11354700080], - [0.00398379389, 0.52112032699, 206.18554843720], - [0.00350769243, 3.30329907896, 426.59819087600], - [0.00206816305, 0.24658372002, 103.09277421860], - [0.00079271300, 3.84007056878, 220.41264243880], - [0.00023990355, 4.66976924553, 110.20632121940], - [0.00016573588, 0.43719228296, 419.48464387520], - [0.00014906995, 5.76903183869, 316.39186965660], - [0.00015820290, 0.93809155235, 632.78373931320], - [0.00014609559, 1.56518472000, 3.93215326310], - [0.00013160301, 4.44891291899, 14.22709400160], - [0.00015053543, 2.71669915667, 639.89728631400], - [0.00013005299, 5.98119023644, 11.04570026390], - [0.00010725067, 3.12939523827, 202.25339517410], - [0.00005863206, 0.23656938524, 529.69096509460], - [0.00005227757, 4.20783365759, 3.18139373770], - [0.00006126317, 1.76328667907, 277.03499374140], - [0.00005019687, 3.17787728405, 433.71173787680], - [0.00004592550, 0.61977744975, 199.07200143640], - [0.00004005867, 2.24479718502, 63.73589830340], - [0.00002953796, 0.98280366998, 95.97922721780], - [0.00003873670, 3.22283226966, 138.51749687070], - [0.00002461186, 2.03163875071, 735.87651353180], - [0.00003269484, 0.77492638211, 949.17560896980], - [0.00001758145, 3.26580109940, 522.57741809380], - [0.00001640172, 5.50504453050, 846.08283475120], - [0.00001391327, 4.02333150505, 323.50541665740], - [0.00001580648, 4.37265307169, 309.27832265580], - [0.00001123498, 2.83726798446, 415.55249061210], - [0.00001017275, 3.71700135395, 227.52618943960], - [0.00000848642, 3.19150170830, 209.36694217490] - ], - [ - [213.29909521690, 0.00000000000, 0.00000000000], - [0.01297370862, 1.82834923978, 213.29909543800], - [0.00564345393, 2.88499717272, 7.11354700080], - [0.00093734369, 1.06311793502, 426.59819087600], - [0.00107674962, 2.27769131009, 206.18554843720], - [0.00040244455, 2.04108104671, 220.41264243880], - [0.00019941774, 1.27954390470, 103.09277421860], - [0.00010511678, 2.74880342130, 14.22709400160], - [0.00006416106, 0.38238295041, 639.89728631400], - [0.00004848994, 2.43037610229, 419.48464387520], - [0.00004056892, 2.92133209468, 110.20632121940], - [0.00003768635, 3.64965330780, 3.93215326310] - ], - [ - [0.00116441330, 1.17988132879, 7.11354700080], - [0.00091841837, 0.07325195840, 213.29909543800], - [0.00036661728, 0.00000000000, 0.00000000000], - [0.00015274496, 4.06493179167, 206.18554843720] - ] - ], - [ - [ - [0.04330678039, 3.60284428399, 213.29909543800], - [0.00240348302, 2.85238489373, 426.59819087600], - [0.00084745939, 0.00000000000, 0.00000000000], - [0.00030863357, 3.48441504555, 220.41264243880], - [0.00034116062, 0.57297307557, 206.18554843720], - [0.00014734070, 2.11846596715, 639.89728631400], - [0.00009916667, 5.79003188904, 419.48464387520], - [0.00006993564, 4.73604689720, 7.11354700080], - [0.00004807588, 5.43305312061, 316.39186965660] - ], - [ - [0.00198927992, 4.93901017903, 213.29909543800], - [0.00036947916, 3.14159265359, 0.00000000000], - [0.00017966989, 0.51979431110, 426.59819087600] - ] - ], - [ - [ - [9.55758135486, 0.00000000000, 0.00000000000], - [0.52921382865, 2.39226219573, 213.29909543800], - [0.01873679867, 5.23549604660, 206.18554843720], - [0.01464663929, 1.64763042902, 426.59819087600], - [0.00821891141, 5.93520042303, 316.39186965660], - [0.00547506923, 5.01532618980, 103.09277421860], - [0.00371684650, 2.27114821115, 220.41264243880], - [0.00361778765, 3.13904301847, 7.11354700080], - [0.00140617506, 5.70406606781, 632.78373931320], - [0.00108974848, 3.29313390175, 110.20632121940], - [0.00069006962, 5.94099540992, 419.48464387520], - [0.00061053367, 0.94037691801, 639.89728631400], - [0.00048913294, 1.55733638681, 202.25339517410], - [0.00034143772, 0.19519102597, 277.03499374140], - [0.00032401773, 5.47084567016, 949.17560896980], - [0.00020936596, 0.46349251129, 735.87651353180], - [0.00009796004, 5.20477537945, 1265.56747862640], - [0.00011993338, 5.98050967385, 846.08283475120], - [0.00020839300, 1.52102476129, 433.71173787680], - [0.00015298404, 3.05943814940, 529.69096509460], - [0.00006465823, 0.17732249942, 1052.26838318840], - [0.00011380257, 1.73105427040, 522.57741809380], - [0.00003419618, 4.94550542171, 1581.95934828300] - ], - [ - [0.06182981340, 0.25843511480, 213.29909543800], - [0.00506577242, 0.71114625261, 206.18554843720], - [0.00341394029, 5.79635741658, 426.59819087600], - [0.00188491195, 0.47215589652, 220.41264243880], - [0.00186261486, 3.14159265359, 0.00000000000], - [0.00143891146, 1.40744822888, 7.11354700080] - ], - [ - [0.00436902572, 4.78671677509, 213.29909543800] - ] - ] -], - - # Uranus - [ - [ - [ - [5.48129294297, 0.00000000000, 0.00000000000], - [0.09260408234, 0.89106421507, 74.78159856730], - [0.01504247898, 3.62719260920, 1.48447270830], - [0.00365981674, 1.89962179044, 73.29712585900], - [0.00272328168, 3.35823706307, 149.56319713460], - [0.00070328461, 5.39254450063, 63.73589830340], - [0.00068892678, 6.09292483287, 76.26607127560], - [0.00061998615, 2.26952066061, 2.96894541660], - [0.00061950719, 2.85098872691, 11.04570026390], - [0.00026468770, 3.14152083966, 71.81265315070], - [0.00025710476, 6.11379840493, 454.90936652730], - [0.00021078850, 4.36059339067, 148.07872442630], - [0.00017818647, 1.74436930289, 36.64856292950], - [0.00014613507, 4.73732166022, 3.93215326310], - [0.00011162509, 5.82681796350, 224.34479570190], - [0.00010997910, 0.48865004018, 138.51749687070], - [0.00009527478, 2.95516862826, 35.16409022120], - [0.00007545601, 5.23626582400, 109.94568878850], - [0.00004220241, 3.23328220918, 70.84944530420], - [0.00004051900, 2.27755017300, 151.04766984290], - [0.00003354596, 1.06549007380, 4.45341812490], - [0.00002926718, 4.62903718891, 9.56122755560], - [0.00003490340, 5.48306144511, 146.59425171800], - [0.00003144069, 4.75199570434, 77.75054398390], - [0.00002922333, 5.35235361027, 85.82729883120], - [0.00002272788, 4.36600400036, 70.32818044240], - [0.00002051219, 1.51773566586, 0.11187458460], - [0.00002148602, 0.60745949945, 38.13303563780], - [0.00001991643, 4.92437588682, 277.03499374140], - [0.00001376226, 2.04283539351, 65.22037101170], - [0.00001666902, 3.62744066769, 380.12776796000], - [0.00001284107, 3.11347961505, 202.25339517410], - [0.00001150429, 0.93343589092, 3.18139373770], - [0.00001533221, 2.58594681212, 52.69019803950], - [0.00001281604, 0.54271272721, 222.86032299360], - [0.00001372139, 4.19641530878, 111.43016149680], - [0.00001221029, 0.19900650030, 108.46121608020], - [0.00000946181, 1.19253165736, 127.47179660680], - [0.00001150989, 4.17898916639, 33.67961751290] - ], - [ - [74.78159860910, 0.00000000000, 0.00000000000], - [0.00154332863, 5.24158770553, 74.78159856730], - [0.00024456474, 1.71260334156, 1.48447270830], - [0.00009258442, 0.42829732350, 11.04570026390], - [0.00008265977, 1.50218091379, 63.73589830340], - [0.00009150160, 1.41213765216, 149.56319713460] - ] - ], - [ - [ - [0.01346277648, 2.61877810547, 74.78159856730], - [0.00062341400, 5.08111189648, 149.56319713460], - [0.00061601196, 3.14159265359, 0.00000000000], - [0.00009963722, 1.61603805646, 76.26607127560], - [0.00009926160, 0.57630380333, 73.29712585900] - ], - [ - [0.00034101978, 0.01321929936, 74.78159856730] - ] - ], - [ - [ - [19.21264847206, 0.00000000000, 0.00000000000], - [0.88784984413, 5.60377527014, 74.78159856730], - [0.03440836062, 0.32836099706, 73.29712585900], - [0.02055653860, 1.78295159330, 149.56319713460], - [0.00649322410, 4.52247285911, 76.26607127560], - [0.00602247865, 3.86003823674, 63.73589830340], - [0.00496404167, 1.40139935333, 454.90936652730], - [0.00338525369, 1.58002770318, 138.51749687070], - [0.00243509114, 1.57086606044, 71.81265315070], - [0.00190522303, 1.99809394714, 1.48447270830], - [0.00161858838, 2.79137786799, 148.07872442630], - [0.00143706183, 1.38368544947, 11.04570026390], - [0.00093192405, 0.17437220467, 36.64856292950], - [0.00071424548, 4.24509236074, 224.34479570190], - [0.00089806014, 3.66105364565, 109.94568878850], - [0.00039009723, 1.66971401684, 70.84944530420], - [0.00046677296, 1.39976401694, 35.16409022120], - [0.00039025624, 3.36234773834, 277.03499374140], - [0.00036755274, 3.88649278513, 146.59425171800], - [0.00030348723, 0.70100838798, 151.04766984290], - [0.00029156413, 3.18056336700, 77.75054398390], - [0.00022637073, 0.72518687029, 529.69096509460], - [0.00011959076, 1.75043392140, 984.60033162190], - [0.00025620756, 5.25656086672, 380.12776796000] - ], - [ - [0.01479896629, 3.67205697578, 74.78159856730] - ] - ] -], - - # Neptune - [ - [ - [ - [5.31188633046, 0.00000000000, 0.00000000000], - [0.01798475530, 2.90101273890, 38.13303563780], - [0.01019727652, 0.48580922867, 1.48447270830], - [0.00124531845, 4.83008090676, 36.64856292950], - [0.00042064466, 5.41054993053, 2.96894541660], - [0.00037714584, 6.09221808686, 35.16409022120], - [0.00033784738, 1.24488874087, 76.26607127560], - [0.00016482741, 0.00007727998, 491.55792945680], - [0.00009198584, 4.93747051954, 39.61750834610], - [0.00008994250, 0.27462171806, 175.16605980020] - ], - [ - [38.13303563957, 0.00000000000, 0.00000000000], - [0.00016604172, 4.86323329249, 1.48447270830], - [0.00015744045, 2.27887427527, 38.13303563780] - ] - ], - [ - [ - [0.03088622933, 1.44104372644, 38.13303563780], - [0.00027780087, 5.91271884599, 76.26607127560], - [0.00027623609, 0.00000000000, 0.00000000000], - [0.00015355489, 2.52123799551, 36.64856292950], - [0.00015448133, 3.50877079215, 39.61750834610] - ] - ], - [ - [ - [30.07013205828, 0.00000000000, 0.00000000000], - [0.27062259632, 1.32999459377, 38.13303563780], - [0.01691764014, 3.25186135653, 36.64856292950], - [0.00807830553, 5.18592878704, 1.48447270830], - [0.00537760510, 4.52113935896, 35.16409022120], - [0.00495725141, 1.57105641650, 491.55792945680], - [0.00274571975, 1.84552258866, 175.16605980020], - [0.00012012320, 1.92059384991, 1021.24889455140], - [0.00121801746, 5.79754470298, 76.26607127560], - [0.00100896068, 0.37702724930, 73.29712585900], - [0.00135134092, 3.37220609835, 39.61750834610], - [0.00007571796, 1.07149207335, 388.46515523820] - ] - ] -], +_vsop: List[_vsop_model_t] = [ +_vsop_model_t( # Mercury + _vsop_formula_t([ + _vsop_series_t([ + (4.40250710144, 0.00000000000, 0.00000000000), + (0.40989414977, 1.48302034195, 26087.90314157420), + (0.05046294200, 4.47785489551, 52175.80628314840), + (0.00855346844, 1.16520322459, 78263.70942472259), + (0.00165590362, 4.11969163423, 104351.61256629678), + (0.00034561897, 0.77930768443, 130439.51570787099), + (0.00007583476, 3.71348404924, 156527.41884944518) + ]), + _vsop_series_t([ + (26087.90313685529, 0.00000000000, 0.00000000000), + (0.01131199811, 6.21874197797, 26087.90314157420), + (0.00292242298, 3.04449355541, 52175.80628314840), + (0.00075775081, 6.08568821653, 78263.70942472259), + (0.00019676525, 2.80965111777, 104351.61256629678) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.11737528961, 1.98357498767, 26087.90314157420), + (0.02388076996, 5.03738959686, 52175.80628314840), + (0.01222839532, 3.14159265359, 0.00000000000), + (0.00543251810, 1.79644363964, 78263.70942472259), + (0.00129778770, 4.83232503958, 104351.61256629678), + (0.00031866927, 1.58088495658, 130439.51570787099), + (0.00007963301, 4.60972126127, 156527.41884944518) + ]), + _vsop_series_t([ + (0.00274646065, 3.95008450011, 26087.90314157420), + (0.00099737713, 3.14159265359, 0.00000000000) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.39528271651, 0.00000000000, 0.00000000000), + (0.07834131818, 6.19233722598, 26087.90314157420), + (0.00795525558, 2.95989690104, 52175.80628314840), + (0.00121281764, 6.01064153797, 78263.70942472259), + (0.00021921969, 2.77820093972, 104351.61256629678), + (0.00004354065, 5.82894543774, 130439.51570787099) + ]), + _vsop_series_t([ + (0.00217347740, 4.65617158665, 26087.90314157420), + (0.00044141826, 1.42385544001, 52175.80628314840) + ]) + ]) +), +_vsop_model_t( # Venus + _vsop_formula_t([ + _vsop_series_t([ + (3.17614666774, 0.00000000000, 0.00000000000), + (0.01353968419, 5.59313319619, 10213.28554621100), + (0.00089891645, 5.30650047764, 20426.57109242200), + (0.00005477194, 4.41630661466, 7860.41939243920), + (0.00003455741, 2.69964447820, 11790.62908865880), + (0.00002372061, 2.99377542079, 3930.20969621960), + (0.00001317168, 5.18668228402, 26.29831979980), + (0.00001664146, 4.25018630147, 1577.34354244780), + (0.00001438387, 4.15745084182, 9683.59458111640), + (0.00001200521, 6.15357116043, 30639.85663863300) + ]), + _vsop_series_t([ + (10213.28554621638, 0.00000000000, 0.00000000000), + (0.00095617813, 2.46406511110, 10213.28554621100), + (0.00007787201, 0.62478482220, 20426.57109242200) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.05923638472, 0.26702775812, 10213.28554621100), + (0.00040107978, 1.14737178112, 20426.57109242200), + (0.00032814918, 3.14159265359, 0.00000000000) + ]), + _vsop_series_t([ + (0.00287821243, 1.88964962838, 10213.28554621100) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.72334820891, 0.00000000000, 0.00000000000), + (0.00489824182, 4.02151831717, 10213.28554621100), + (0.00001658058, 4.90206728031, 20426.57109242200), + (0.00001378043, 1.12846591367, 11790.62908865880), + (0.00001632096, 2.84548795207, 7860.41939243920), + (0.00000498395, 2.58682193892, 9683.59458111640), + (0.00000221985, 2.01346696541, 19367.18916223280), + (0.00000237454, 2.55136053886, 15720.83878487840) + ]), + _vsop_series_t([ + (0.00034551041, 0.89198706276, 10213.28554621100) + ]) + ]) +), +_vsop_model_t( # Earth + _vsop_formula_t([ + _vsop_series_t([ + (1.75347045673, 0.00000000000, 0.00000000000), + (0.03341656453, 4.66925680415, 6283.07584999140), + (0.00034894275, 4.62610242189, 12566.15169998280), + (0.00003417572, 2.82886579754, 3.52311834900), + (0.00003497056, 2.74411783405, 5753.38488489680), + (0.00003135899, 3.62767041756, 77713.77146812050), + (0.00002676218, 4.41808345438, 7860.41939243920), + (0.00002342691, 6.13516214446, 3930.20969621960), + (0.00001273165, 2.03709657878, 529.69096509460), + (0.00001324294, 0.74246341673, 11506.76976979360), + (0.00000901854, 2.04505446477, 26.29831979980), + (0.00001199167, 1.10962946234, 1577.34354244780), + (0.00000857223, 3.50849152283, 398.14900340820), + (0.00000779786, 1.17882681962, 5223.69391980220), + (0.00000990250, 5.23268072088, 5884.92684658320), + (0.00000753141, 2.53339052847, 5507.55323866740), + (0.00000505267, 4.58292599973, 18849.22754997420), + (0.00000492392, 4.20505711826, 775.52261132400), + (0.00000356672, 2.91954114478, 0.06731030280), + (0.00000284125, 1.89869240932, 796.29800681640), + (0.00000242879, 0.34481445893, 5486.77784317500), + (0.00000317087, 5.84901948512, 11790.62908865880), + (0.00000271112, 0.31486255375, 10977.07880469900), + (0.00000206217, 4.80646631478, 2544.31441988340), + (0.00000205478, 1.86953770281, 5573.14280143310), + (0.00000202318, 2.45767790232, 6069.77675455340), + (0.00000126225, 1.08295459501, 20.77539549240), + (0.00000155516, 0.83306084617, 213.29909543800) + ]), + _vsop_series_t([ + (6283.07584999140, 0.00000000000, 0.00000000000), + (0.00206058863, 2.67823455808, 6283.07584999140), + (0.00004303419, 2.63512233481, 12566.15169998280) + ]), + _vsop_series_t([ + (0.00008721859, 1.07253635559, 6283.07584999140) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + ]), + _vsop_series_t([ + (0.00227777722, 3.41376620530, 6283.07584999140), + (0.00003805678, 3.37063423795, 12566.15169998280) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (1.00013988784, 0.00000000000, 0.00000000000), + (0.01670699632, 3.09846350258, 6283.07584999140), + (0.00013956024, 3.05524609456, 12566.15169998280), + (0.00003083720, 5.19846674381, 77713.77146812050), + (0.00001628463, 1.17387558054, 5753.38488489680), + (0.00001575572, 2.84685214877, 7860.41939243920), + (0.00000924799, 5.45292236722, 11506.76976979360), + (0.00000542439, 4.56409151453, 3930.20969621960), + (0.00000472110, 3.66100022149, 5884.92684658320), + (0.00000085831, 1.27079125277, 161000.68573767410), + (0.00000057056, 2.01374292245, 83996.84731811189), + (0.00000055736, 5.24159799170, 71430.69561812909), + (0.00000174844, 3.01193636733, 18849.22754997420), + (0.00000243181, 4.27349530790, 11790.62908865880) + ]), + _vsop_series_t([ + (0.00103018607, 1.10748968172, 6283.07584999140), + (0.00001721238, 1.06442300386, 12566.15169998280) + ]), + _vsop_series_t([ + (0.00004359385, 5.78455133808, 6283.07584999140) + ]) + ]) +), +_vsop_model_t( # Mars + _vsop_formula_t([ + _vsop_series_t([ + (6.20347711581, 0.00000000000, 0.00000000000), + (0.18656368093, 5.05037100270, 3340.61242669980), + (0.01108216816, 5.40099836344, 6681.22485339960), + (0.00091798406, 5.75478744667, 10021.83728009940), + (0.00027744987, 5.97049513147, 3.52311834900), + (0.00010610235, 2.93958560338, 2281.23049651060), + (0.00012315897, 0.84956094002, 2810.92146160520), + (0.00008926784, 4.15697846427, 0.01725365220), + (0.00008715691, 6.11005153139, 13362.44970679920), + (0.00006797556, 0.36462229657, 398.14900340820), + (0.00007774872, 3.33968761376, 5621.84292321040), + (0.00003575078, 1.66186505710, 2544.31441988340), + (0.00004161108, 0.22814971327, 2942.46342329160), + (0.00003075252, 0.85696614132, 191.44826611160), + (0.00002628117, 0.64806124465, 3337.08930835080), + (0.00002937546, 6.07893711402, 0.06731030280), + (0.00002389414, 5.03896442664, 796.29800681640), + (0.00002579844, 0.02996736156, 3344.13554504880), + (0.00001528141, 1.14979301996, 6151.53388830500), + (0.00001798806, 0.65634057445, 529.69096509460), + (0.00001264357, 3.62275122593, 5092.15195811580), + (0.00001286228, 3.06796065034, 2146.16541647520), + (0.00001546404, 2.91579701718, 1751.53953141600), + (0.00001024902, 3.69334099279, 8962.45534991020), + (0.00000891566, 0.18293837498, 16703.06213349900), + (0.00000858759, 2.40093811940, 2914.01423582380), + (0.00000832715, 2.46418619474, 3340.59517304760), + (0.00000832720, 4.49495782139, 3340.62968035200), + (0.00000712902, 3.66335473479, 1059.38193018920), + (0.00000748723, 3.82248614017, 155.42039943420), + (0.00000723861, 0.67497311481, 3738.76143010800), + (0.00000635548, 2.92182225127, 8432.76438481560), + (0.00000655162, 0.48864064125, 3127.31333126180), + (0.00000550474, 3.81001042328, 0.98032106820), + (0.00000552750, 4.47479317037, 1748.01641306700), + (0.00000425966, 0.55364317304, 6283.07584999140), + (0.00000415131, 0.49662285038, 213.29909543800), + (0.00000472167, 3.62547124025, 1194.44701022460), + (0.00000306551, 0.38052848348, 6684.74797174860), + (0.00000312141, 0.99853944405, 6677.70173505060), + (0.00000293198, 4.22131299634, 20.77539549240), + (0.00000302375, 4.48618007156, 3532.06069281140), + (0.00000274027, 0.54222167059, 3340.54511639700), + (0.00000281079, 5.88163521788, 1349.86740965880), + (0.00000231183, 1.28242156993, 3870.30339179440), + (0.00000283602, 5.76885434940, 3149.16416058820), + (0.00000236117, 5.75503217933, 3333.49887969900), + (0.00000274033, 0.13372524985, 3340.67973700260), + (0.00000299395, 2.78323740866, 6254.62666252360) + ]), + _vsop_series_t([ + (3340.61242700512, 0.00000000000, 0.00000000000), + (0.01457554523, 3.60433733236, 3340.61242669980), + (0.00168414711, 3.92318567804, 6681.22485339960), + (0.00020622975, 4.26108844583, 10021.83728009940), + (0.00003452392, 4.73210393190, 3.52311834900), + (0.00002586332, 4.60670058555, 13362.44970679920), + (0.00000841535, 4.45864030426, 2281.23049651060) + ]), + _vsop_series_t([ + (0.00058152577, 2.04961712429, 3340.61242669980), + (0.00013459579, 2.45738706163, 6681.22485339960) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.03197134986, 3.76832042431, 3340.61242669980), + (0.00298033234, 4.10616996305, 6681.22485339960), + (0.00289104742, 0.00000000000, 0.00000000000), + (0.00031365539, 4.44651053090, 10021.83728009940), + (0.00003484100, 4.78812549260, 13362.44970679920) + ]), + _vsop_series_t([ + (0.00217310991, 6.04472194776, 3340.61242669980), + (0.00020976948, 3.14159265359, 0.00000000000), + (0.00012834709, 1.60810667915, 6681.22485339960) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (1.53033488271, 0.00000000000, 0.00000000000), + (0.14184953160, 3.47971283528, 3340.61242669980), + (0.00660776362, 3.81783443019, 6681.22485339960), + (0.00046179117, 4.15595316782, 10021.83728009940), + (0.00008109733, 5.55958416318, 2810.92146160520), + (0.00007485318, 1.77239078402, 5621.84292321040), + (0.00005523191, 1.36436303770, 2281.23049651060), + (0.00003825160, 4.49407183687, 13362.44970679920), + (0.00002306537, 0.09081579001, 2544.31441988340), + (0.00001999396, 5.36059617709, 3337.08930835080), + (0.00002484394, 4.92545639920, 2942.46342329160), + (0.00001960195, 4.74249437639, 3344.13554504880), + (0.00001167119, 2.11260868341, 5092.15195811580), + (0.00001102816, 5.00908403998, 398.14900340820), + (0.00000899066, 4.40791133207, 529.69096509460), + (0.00000992252, 5.83861961952, 6151.53388830500), + (0.00000807354, 2.10217065501, 1059.38193018920), + (0.00000797915, 3.44839203899, 796.29800681640), + (0.00000740975, 1.49906336885, 2146.16541647520) + ]), + _vsop_series_t([ + (0.01107433345, 2.03250524857, 3340.61242669980), + (0.00103175887, 2.37071847807, 6681.22485339960), + (0.00012877200, 0.00000000000, 0.00000000000), + (0.00010815880, 2.70888095665, 10021.83728009940) + ]), + _vsop_series_t([ + (0.00044242249, 0.47930604954, 3340.61242669980), + (0.00008138042, 0.86998389204, 6681.22485339960) + ]) + ]) +), +_vsop_model_t( # Jupiter + _vsop_formula_t([ + _vsop_series_t([ + (0.59954691494, 0.00000000000, 0.00000000000), + (0.09695898719, 5.06191793158, 529.69096509460), + (0.00573610142, 1.44406205629, 7.11354700080), + (0.00306389205, 5.41734730184, 1059.38193018920), + (0.00097178296, 4.14264726552, 632.78373931320), + (0.00072903078, 3.64042916389, 522.57741809380), + (0.00064263975, 3.41145165351, 103.09277421860), + (0.00039806064, 2.29376740788, 419.48464387520), + (0.00038857767, 1.27231755835, 316.39186965660), + (0.00027964629, 1.78454591820, 536.80451209540), + (0.00013589730, 5.77481040790, 1589.07289528380), + (0.00008246349, 3.58227925840, 206.18554843720), + (0.00008768704, 3.63000308199, 949.17560896980), + (0.00007368042, 5.08101194270, 735.87651353180), + (0.00006263150, 0.02497628807, 213.29909543800), + (0.00006114062, 4.51319998626, 1162.47470440780), + (0.00004905396, 1.32084470588, 110.20632121940), + (0.00005305285, 1.30671216791, 14.22709400160), + (0.00005305441, 4.18625634012, 1052.26838318840), + (0.00004647248, 4.69958103684, 3.93215326310), + (0.00003045023, 4.31676431084, 426.59819087600), + (0.00002609999, 1.56667394063, 846.08283475120), + (0.00002028191, 1.06376530715, 3.18139373770), + (0.00001764763, 2.14148655117, 1066.49547719000), + (0.00001722972, 3.88036268267, 1265.56747862640), + (0.00001920945, 0.97168196472, 639.89728631400), + (0.00001633223, 3.58201833555, 515.46387109300), + (0.00001431999, 4.29685556046, 625.67019231240), + (0.00000973272, 4.09764549134, 95.97922721780) + ]), + _vsop_series_t([ + (529.69096508814, 0.00000000000, 0.00000000000), + (0.00489503243, 4.22082939470, 529.69096509460), + (0.00228917222, 6.02646855621, 7.11354700080), + (0.00030099479, 4.54540782858, 1059.38193018920), + (0.00020720920, 5.45943156902, 522.57741809380), + (0.00012103653, 0.16994816098, 536.80451209540), + (0.00006067987, 4.42422292017, 103.09277421860), + (0.00005433968, 3.98480737746, 419.48464387520), + (0.00004237744, 5.89008707199, 14.22709400160) + ]), + _vsop_series_t([ + (0.00047233601, 4.32148536482, 7.11354700080), + (0.00030649436, 2.92977788700, 529.69096509460), + (0.00014837605, 3.14159265359, 0.00000000000) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.02268615702, 3.55852606721, 529.69096509460), + (0.00109971634, 3.90809347197, 1059.38193018920), + (0.00110090358, 0.00000000000, 0.00000000000), + (0.00008101428, 3.60509572885, 522.57741809380), + (0.00006043996, 4.25883108339, 1589.07289528380), + (0.00006437782, 0.30627119215, 536.80451209540) + ]), + _vsop_series_t([ + (0.00078203446, 1.52377859742, 529.69096509460) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (5.20887429326, 0.00000000000, 0.00000000000), + (0.25209327119, 3.49108639871, 529.69096509460), + (0.00610599976, 3.84115365948, 1059.38193018920), + (0.00282029458, 2.57419881293, 632.78373931320), + (0.00187647346, 2.07590383214, 522.57741809380), + (0.00086792905, 0.71001145545, 419.48464387520), + (0.00072062974, 0.21465724607, 536.80451209540), + (0.00065517248, 5.97995884790, 316.39186965660), + (0.00029134542, 1.67759379655, 103.09277421860), + (0.00030135335, 2.16132003734, 949.17560896980), + (0.00023453271, 3.54023522184, 735.87651353180), + (0.00022283743, 4.19362594399, 1589.07289528380), + (0.00023947298, 0.27458037480, 7.11354700080), + (0.00013032614, 2.96042965363, 1162.47470440780), + (0.00009703360, 1.90669633585, 206.18554843720), + (0.00012749023, 2.71550286592, 1052.26838318840), + (0.00007057931, 2.18184839926, 1265.56747862640), + (0.00006137703, 6.26418240033, 846.08283475120), + (0.00002616976, 2.00994012876, 1581.95934828300) + ]), + _vsop_series_t([ + (0.01271801520, 2.64937512894, 529.69096509460), + (0.00061661816, 3.00076460387, 1059.38193018920), + (0.00053443713, 3.89717383175, 522.57741809380), + (0.00031185171, 4.88276958012, 536.80451209540), + (0.00041390269, 0.00000000000, 0.00000000000) + ]) + ]) +), +_vsop_model_t( # Saturn + _vsop_formula_t([ + _vsop_series_t([ + (0.87401354025, 0.00000000000, 0.00000000000), + (0.11107659762, 3.96205090159, 213.29909543800), + (0.01414150957, 4.58581516874, 7.11354700080), + (0.00398379389, 0.52112032699, 206.18554843720), + (0.00350769243, 3.30329907896, 426.59819087600), + (0.00206816305, 0.24658372002, 103.09277421860), + (0.00079271300, 3.84007056878, 220.41264243880), + (0.00023990355, 4.66976924553, 110.20632121940), + (0.00016573588, 0.43719228296, 419.48464387520), + (0.00014906995, 5.76903183869, 316.39186965660), + (0.00015820290, 0.93809155235, 632.78373931320), + (0.00014609559, 1.56518472000, 3.93215326310), + (0.00013160301, 4.44891291899, 14.22709400160), + (0.00015053543, 2.71669915667, 639.89728631400), + (0.00013005299, 5.98119023644, 11.04570026390), + (0.00010725067, 3.12939523827, 202.25339517410), + (0.00005863206, 0.23656938524, 529.69096509460), + (0.00005227757, 4.20783365759, 3.18139373770), + (0.00006126317, 1.76328667907, 277.03499374140), + (0.00005019687, 3.17787728405, 433.71173787680), + (0.00004592550, 0.61977744975, 199.07200143640), + (0.00004005867, 2.24479718502, 63.73589830340), + (0.00002953796, 0.98280366998, 95.97922721780), + (0.00003873670, 3.22283226966, 138.51749687070), + (0.00002461186, 2.03163875071, 735.87651353180), + (0.00003269484, 0.77492638211, 949.17560896980), + (0.00001758145, 3.26580109940, 522.57741809380), + (0.00001640172, 5.50504453050, 846.08283475120), + (0.00001391327, 4.02333150505, 323.50541665740), + (0.00001580648, 4.37265307169, 309.27832265580), + (0.00001123498, 2.83726798446, 415.55249061210), + (0.00001017275, 3.71700135395, 227.52618943960), + (0.00000848642, 3.19150170830, 209.36694217490) + ]), + _vsop_series_t([ + (213.29909521690, 0.00000000000, 0.00000000000), + (0.01297370862, 1.82834923978, 213.29909543800), + (0.00564345393, 2.88499717272, 7.11354700080), + (0.00093734369, 1.06311793502, 426.59819087600), + (0.00107674962, 2.27769131009, 206.18554843720), + (0.00040244455, 2.04108104671, 220.41264243880), + (0.00019941774, 1.27954390470, 103.09277421860), + (0.00010511678, 2.74880342130, 14.22709400160), + (0.00006416106, 0.38238295041, 639.89728631400), + (0.00004848994, 2.43037610229, 419.48464387520), + (0.00004056892, 2.92133209468, 110.20632121940), + (0.00003768635, 3.64965330780, 3.93215326310) + ]), + _vsop_series_t([ + (0.00116441330, 1.17988132879, 7.11354700080), + (0.00091841837, 0.07325195840, 213.29909543800), + (0.00036661728, 0.00000000000, 0.00000000000), + (0.00015274496, 4.06493179167, 206.18554843720) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.04330678039, 3.60284428399, 213.29909543800), + (0.00240348302, 2.85238489373, 426.59819087600), + (0.00084745939, 0.00000000000, 0.00000000000), + (0.00030863357, 3.48441504555, 220.41264243880), + (0.00034116062, 0.57297307557, 206.18554843720), + (0.00014734070, 2.11846596715, 639.89728631400), + (0.00009916667, 5.79003188904, 419.48464387520), + (0.00006993564, 4.73604689720, 7.11354700080), + (0.00004807588, 5.43305312061, 316.39186965660) + ]), + _vsop_series_t([ + (0.00198927992, 4.93901017903, 213.29909543800), + (0.00036947916, 3.14159265359, 0.00000000000), + (0.00017966989, 0.51979431110, 426.59819087600) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (9.55758135486, 0.00000000000, 0.00000000000), + (0.52921382865, 2.39226219573, 213.29909543800), + (0.01873679867, 5.23549604660, 206.18554843720), + (0.01464663929, 1.64763042902, 426.59819087600), + (0.00821891141, 5.93520042303, 316.39186965660), + (0.00547506923, 5.01532618980, 103.09277421860), + (0.00371684650, 2.27114821115, 220.41264243880), + (0.00361778765, 3.13904301847, 7.11354700080), + (0.00140617506, 5.70406606781, 632.78373931320), + (0.00108974848, 3.29313390175, 110.20632121940), + (0.00069006962, 5.94099540992, 419.48464387520), + (0.00061053367, 0.94037691801, 639.89728631400), + (0.00048913294, 1.55733638681, 202.25339517410), + (0.00034143772, 0.19519102597, 277.03499374140), + (0.00032401773, 5.47084567016, 949.17560896980), + (0.00020936596, 0.46349251129, 735.87651353180), + (0.00009796004, 5.20477537945, 1265.56747862640), + (0.00011993338, 5.98050967385, 846.08283475120), + (0.00020839300, 1.52102476129, 433.71173787680), + (0.00015298404, 3.05943814940, 529.69096509460), + (0.00006465823, 0.17732249942, 1052.26838318840), + (0.00011380257, 1.73105427040, 522.57741809380), + (0.00003419618, 4.94550542171, 1581.95934828300) + ]), + _vsop_series_t([ + (0.06182981340, 0.25843511480, 213.29909543800), + (0.00506577242, 0.71114625261, 206.18554843720), + (0.00341394029, 5.79635741658, 426.59819087600), + (0.00188491195, 0.47215589652, 220.41264243880), + (0.00186261486, 3.14159265359, 0.00000000000), + (0.00143891146, 1.40744822888, 7.11354700080) + ]), + _vsop_series_t([ + (0.00436902572, 4.78671677509, 213.29909543800) + ]) + ]) +), +_vsop_model_t( # Uranus + _vsop_formula_t([ + _vsop_series_t([ + (5.48129294297, 0.00000000000, 0.00000000000), + (0.09260408234, 0.89106421507, 74.78159856730), + (0.01504247898, 3.62719260920, 1.48447270830), + (0.00365981674, 1.89962179044, 73.29712585900), + (0.00272328168, 3.35823706307, 149.56319713460), + (0.00070328461, 5.39254450063, 63.73589830340), + (0.00068892678, 6.09292483287, 76.26607127560), + (0.00061998615, 2.26952066061, 2.96894541660), + (0.00061950719, 2.85098872691, 11.04570026390), + (0.00026468770, 3.14152083966, 71.81265315070), + (0.00025710476, 6.11379840493, 454.90936652730), + (0.00021078850, 4.36059339067, 148.07872442630), + (0.00017818647, 1.74436930289, 36.64856292950), + (0.00014613507, 4.73732166022, 3.93215326310), + (0.00011162509, 5.82681796350, 224.34479570190), + (0.00010997910, 0.48865004018, 138.51749687070), + (0.00009527478, 2.95516862826, 35.16409022120), + (0.00007545601, 5.23626582400, 109.94568878850), + (0.00004220241, 3.23328220918, 70.84944530420), + (0.00004051900, 2.27755017300, 151.04766984290), + (0.00003354596, 1.06549007380, 4.45341812490), + (0.00002926718, 4.62903718891, 9.56122755560), + (0.00003490340, 5.48306144511, 146.59425171800), + (0.00003144069, 4.75199570434, 77.75054398390), + (0.00002922333, 5.35235361027, 85.82729883120), + (0.00002272788, 4.36600400036, 70.32818044240), + (0.00002051219, 1.51773566586, 0.11187458460), + (0.00002148602, 0.60745949945, 38.13303563780), + (0.00001991643, 4.92437588682, 277.03499374140), + (0.00001376226, 2.04283539351, 65.22037101170), + (0.00001666902, 3.62744066769, 380.12776796000), + (0.00001284107, 3.11347961505, 202.25339517410), + (0.00001150429, 0.93343589092, 3.18139373770), + (0.00001533221, 2.58594681212, 52.69019803950), + (0.00001281604, 0.54271272721, 222.86032299360), + (0.00001372139, 4.19641530878, 111.43016149680), + (0.00001221029, 0.19900650030, 108.46121608020), + (0.00000946181, 1.19253165736, 127.47179660680), + (0.00001150989, 4.17898916639, 33.67961751290) + ]), + _vsop_series_t([ + (74.78159860910, 0.00000000000, 0.00000000000), + (0.00154332863, 5.24158770553, 74.78159856730), + (0.00024456474, 1.71260334156, 1.48447270830), + (0.00009258442, 0.42829732350, 11.04570026390), + (0.00008265977, 1.50218091379, 63.73589830340), + (0.00009150160, 1.41213765216, 149.56319713460) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.01346277648, 2.61877810547, 74.78159856730), + (0.00062341400, 5.08111189648, 149.56319713460), + (0.00061601196, 3.14159265359, 0.00000000000), + (0.00009963722, 1.61603805646, 76.26607127560), + (0.00009926160, 0.57630380333, 73.29712585900) + ]), + _vsop_series_t([ + (0.00034101978, 0.01321929936, 74.78159856730) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (19.21264847206, 0.00000000000, 0.00000000000), + (0.88784984413, 5.60377527014, 74.78159856730), + (0.03440836062, 0.32836099706, 73.29712585900), + (0.02055653860, 1.78295159330, 149.56319713460), + (0.00649322410, 4.52247285911, 76.26607127560), + (0.00602247865, 3.86003823674, 63.73589830340), + (0.00496404167, 1.40139935333, 454.90936652730), + (0.00338525369, 1.58002770318, 138.51749687070), + (0.00243509114, 1.57086606044, 71.81265315070), + (0.00190522303, 1.99809394714, 1.48447270830), + (0.00161858838, 2.79137786799, 148.07872442630), + (0.00143706183, 1.38368544947, 11.04570026390), + (0.00093192405, 0.17437220467, 36.64856292950), + (0.00071424548, 4.24509236074, 224.34479570190), + (0.00089806014, 3.66105364565, 109.94568878850), + (0.00039009723, 1.66971401684, 70.84944530420), + (0.00046677296, 1.39976401694, 35.16409022120), + (0.00039025624, 3.36234773834, 277.03499374140), + (0.00036755274, 3.88649278513, 146.59425171800), + (0.00030348723, 0.70100838798, 151.04766984290), + (0.00029156413, 3.18056336700, 77.75054398390), + (0.00022637073, 0.72518687029, 529.69096509460), + (0.00011959076, 1.75043392140, 984.60033162190), + (0.00025620756, 5.25656086672, 380.12776796000) + ]), + _vsop_series_t([ + (0.01479896629, 3.67205697578, 74.78159856730) + ]) + ]) +), +_vsop_model_t( # Neptune + _vsop_formula_t([ + _vsop_series_t([ + (5.31188633046, 0.00000000000, 0.00000000000), + (0.01798475530, 2.90101273890, 38.13303563780), + (0.01019727652, 0.48580922867, 1.48447270830), + (0.00124531845, 4.83008090676, 36.64856292950), + (0.00042064466, 5.41054993053, 2.96894541660), + (0.00037714584, 6.09221808686, 35.16409022120), + (0.00033784738, 1.24488874087, 76.26607127560), + (0.00016482741, 0.00007727998, 491.55792945680), + (0.00009198584, 4.93747051954, 39.61750834610), + (0.00008994250, 0.27462171806, 175.16605980020) + ]), + _vsop_series_t([ + (38.13303563957, 0.00000000000, 0.00000000000), + (0.00016604172, 4.86323329249, 1.48447270830), + (0.00015744045, 2.27887427527, 38.13303563780) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (0.03088622933, 1.44104372644, 38.13303563780), + (0.00027780087, 5.91271884599, 76.26607127560), + (0.00027623609, 0.00000000000, 0.00000000000), + (0.00015355489, 2.52123799551, 36.64856292950), + (0.00015448133, 3.50877079215, 39.61750834610) + ]) + ]), + _vsop_formula_t([ + _vsop_series_t([ + (30.07013205828, 0.00000000000, 0.00000000000), + (0.27062259632, 1.32999459377, 38.13303563780), + (0.01691764014, 3.25186135653, 36.64856292950), + (0.00807830553, 5.18592878704, 1.48447270830), + (0.00537760510, 4.52113935896, 35.16409022120), + (0.00495725141, 1.57105641650, 491.55792945680), + (0.00274571975, 1.84552258866, 175.16605980020), + (0.00012012320, 1.92059384991, 1021.24889455140), + (0.00121801746, 5.79754470298, 76.26607127560), + (0.00100896068, 0.37702724930, 73.29712585900), + (0.00135134092, 3.37220609835, 39.61750834610), + (0.00007571796, 1.07149207335, 388.46515523820) + ]) + ]) +), ] -def _VsopFormula(formula: List[List[List[float]]], t: float, clamp_angle: bool) -> float: +def _VsopFormula(formula: _vsop_formula_t, t: float, clamp_angle: bool) -> float: tpower = 1.0 coord = 0.0 - for series in formula: - incr = tpower * sum(A * math.cos(B + C*t) for (A, B, C) in series) + for series in formula.seriesList: + incr = tpower * sum((ampl * math.cos(phas + freq*t)) for (ampl, phas, freq) in series.termList) if clamp_angle: # Longitude angles can be hundreds of radians. # Improve precision by keeping each increment within [-2*pi, +2*pi]. @@ -3085,15 +3075,15 @@ def _VsopFormula(formula: List[List[List[float]]], t: float, clamp_angle: bool) tpower *= t return coord -def _VsopDeriv(formula: List[List[List[float]]], t: float) -> float: +def _VsopDeriv(formula: _vsop_formula_t, t: float) -> float: tpower = 1.0 # t**s dpower = 0.0 # t**(s-1) deriv = 0.0 s = 0 - for series in formula: + for series in formula.seriesList: sin_sum = 0.0 cos_sum = 0.0 - for (ampl, phas, freq) in series: + for (ampl, phas, freq) in series.termList: angle = phas + (t * freq) sin_sum += ampl * freq * math.sin(angle) if s > 0: @@ -3122,11 +3112,11 @@ def _VsopSphereToRect(lon: float, lat: float, rad: float) -> "_TerseVector": rad * math.sin(lat) ) -def _CalcVsop(model: List[List[List[List[float]]]], time: Time) -> Vector: +def _CalcVsop(model: _vsop_model_t, time: Time) -> Vector: t = time.tt / _DAYS_PER_MILLENNIUM - lon = _VsopFormula(model[0], t, True) - lat = _VsopFormula(model[1], t, False) - rad = _VsopFormula(model[2], t, False) + lon = _VsopFormula(model.lon, t, True) + lat = _VsopFormula(model.lat, t, False) + rad = _VsopFormula(model.rad, t, False) eclip = _VsopSphereToRect(lon, lat, rad) return _VsopRotate(eclip).ToAstroVector(time) @@ -3143,14 +3133,16 @@ class _body_state_t: def __sub__(self, other: "_body_state_t") -> "_body_state_t": return _body_state_t(self.tt, self.r - other.r, self.v - other.v) -def _CalcVsopPosVel(model: List[List[List[List[float]]]], tt: float) -> _body_state_t: +def _CalcVsopPosVel(model: _vsop_model_t, tt: float) -> _body_state_t: t = tt / _DAYS_PER_MILLENNIUM - lon = _VsopFormula(model[0], t, True) - lat = _VsopFormula(model[1], t, False) - rad = _VsopFormula(model[2], t, False) + lon = _VsopFormula(model.lon, t, True) + lat = _VsopFormula(model.lat, t, False) + rad = _VsopFormula(model.rad, t, False) - (dlon_dt, dlat_dt, drad_dt) = [_VsopDeriv(formula, t) for formula in model] + dlon_dt = _VsopDeriv(model.lon, t) + dlat_dt = _VsopDeriv(model.lat, t) + drad_dt = _VsopDeriv(model.rad, t) # Use spherical coords and spherical derivatives to calculate # the velocity vector in rectangular coordinates. @@ -3205,11 +3197,11 @@ def _CalcSolarSystemBarycenter(time: Time) -> Vector: return ssb -def _VsopHelioDistance(model: List[List[List[List[float]]]], time: Time) -> float: +def _VsopHelioDistance(model: _vsop_model_t, time: Time) -> float: # The caller only wants to know the distance between the planet and the Sun. # So we only need to calculate the radial component of the spherical coordinates. # There is no need to translate coordinates. - return _VsopFormula(model[2], time.tt / _DAYS_PER_MILLENNIUM, False) + return _VsopFormula(model.rad, time.tt / _DAYS_PER_MILLENNIUM, False) def _CalcEarth(time: Time) -> Vector: return _CalcVsop(_vsop[Body.Earth.value], time)