Saturday, January 31, 2015

Moto ellittico e determinazione della posizione di un pianeta dati gli elementi orbitali

La seconda area di interesse, nella costruzione del nostro software astrologico, è quella dedicata alla determinazione, quanto più possibile precisa, della posizione di un corpo celeste nello spazio. L'astrologia adotta una rappresentazione estremamente semplificata, di fatto riducendosi a considerare esclusivamente la longitudine geocentrica eclittica. Sarà quindi compito del nostro software determinare questa variabile e, per farlo, utilizzeremo le normali modalità di calcolo astronomico in uso, cercando di contenere l'errore e, quando si renderà utile o necessario, verificando più metodi di calcolo. La precisione richiesta per la determinazione della longitudine eclittica di un pianeta varia secondo le tecniche utilizzate.

Inizieremo con il calcolo della posizione del Sole, passando in rassegna diverse tecniche e cercando di stimare l'errore. Come anticipato in un post precedente, partiamo dalla pagina web di Paul Schlyter.

Dalle leggi di Keplero si ricavano i metodi per la determinazione della posizione di un corpo celeste che si muove in un'orbita ellittica.

Prima di procedere oltre ho deciso di rendere accessibile on line il software che progressivamente produco. Per farlo usero' github. Usate liberamente questo link: https://github/zdomjus60. Il repository di interesse si chiama astrometry. Se sapete usare git potete clonare il repository e lavorarci sopra, altrimenti scaricatelo come file zip. Cerchero' di tenerlo aggiornato in linea con il blog.

Passiamo al moto ellittico. In questo post uso il metodo indicato da Paul Schlyter nella pagina How to compute planetary positions.

Per usare il programma planets.py è sufficiente un'operazione di import come si vede nel file test.py che riporto integralmente di seguito:

# -*- coding: utf-8 -*-
# calculate Sun longitude according to Paul Schlyter formulas
from trigon import *
from planets import Planet
year, month, day = (1990, 4, 19)
for body in ('Sun', 'Moon', 'Mercury', 'Venus', 'Mars',
               'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto'):
    
    planet = Planet(body, year, month, day).position()
    print body, planet

Ho cercato di seguire fedelmente le istruzioni di Paul Schlyter per facilità di confronto del codice e dei risultati di calcolo. Ho lasciato, per esempio, l'ascensione retta in gradi, anche se di solito viene rappresentata in ore (é sufficiente dividere i gradi per 15 per avere la rappresentazione oraria).

La precisione che si raggiunge non è male, ma nel seguito faremo altre prove. Invito sempre chi legge a contribuire, anche su github, mettendo a disposizione qualche suggerimento. Il programma è ancora un po' ruvido e richiede semplificazione e ottimizzazione. Nel seguito faro' qualche aggiornamento. Alla prossima.

No comments:

Post a Comment

How to create a virtual linux machine with qemu under Debian or Ubuntu with near native graphics performance

It's been a long time since my latest post. I know, I'm lazy. But every now and then I like to publish something that other people c...