Bonjour,
Je suis en train d'écrire un petit programme afin de convertir les coordonnées équatoriales d'un objet céleste en coordonnées Alt-azimutales avec un Arduino Mega 2560. Pour cela je me suis grandement inspiré de ce si http://www.stargazing.net/kepler/altaz.html.
Dans un premier temps j'ai calculé l'heure sidérale locale en fonction de ma position sur le globe, puis l'angle horaire afin de pouvoir déterminer par la suite la hauteur et l'azimut de l'objet observé en fonction du temps.
Cependant en comparant mes résultats avec ceux proposés par Stellarium je trouve une différence de plusieurs degrés.. J'ai l'impression d'avoir corrigé toutes les erreurs de monde code, mais n'ayant plus de recule je recherche de l'aide ..
Donc dans un premier temps, le nombre de jours passé depuis la date 1er Janvier 2000 à 12h est calculé, en fraction de jours.
Ensuite l'heure sidérale locale (LST) puis l'angle horaire sont calculés. Le calcul de l'heure sidérale locale est très proche, si ce n'est égale, à l'heure sidérale locale fourni par ce site web http://www.jgiesen.de/astro/astroJS/siderealClock/Code://Calcul du numéro du jour entre 0 et 365 int numeroJour(int annee, int mois, int jours) { int dayNumber = 0; int dayMonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(annee%4 == 0 && annee%100 != 0 || annee%400 == 0) { dayMonth[1] = 29; } for(int i=1; i<mois; i++) { dayNumber += dayMonth[(i-1)]; } dayNumber += jours; return dayNumber; }
Et enfin les hauteur et azimutsCode://Calcul de l'angle horaire pour la conversion des coordonnées double angleHoraireFunction(double heure, double minute, double seconde, double annee, double anneeSiderale, double jourSiderale, int nombreJours, double longitude, double ascencionDroite) { double fractionJour = heure/24 + minute/(24.0*60.0) + seconde/(24.0*60.0*60.0) + 0.5; double daySiderale = (annee - 2000) * anneeSiderale + nombreJours * jourSiderale + fractionJour; //Temps UTC double universalTime; if (heure == 0) { universalTime = 23 + minute/60 + seconde/3600; } else { universalTime = heure - 1 + minute/60 + seconde/3600; } double LST = 100.46 + 0.985647 * daySiderale + longitude + 15 * universalTime; while (LST > 360) { LST = LST - 360; } while (LST < 0) { LST = LST + 360; } double angleHoraire = LST - ascencionDroite; if(angleHoraire < 0) { angleHoraire = angleHoraire + 360; } return angleHoraire; }
Code://Calcul de l'angle d'altitude double angleAltitudeFunction(double latitude, double declinaison, double angleHoraire, double pi) { angleAlt = 180/pi*asin(sin(latitude) * sin(declinaison) + cos(latitude) * cos(declinaison) * cos(pi/180*angleHoraire)); return angleAlt; }D'avance merci !Code://Calcul de l'angle azimutal double angleAzimutalFunction(double declinaison, double angleAlt, double latitude, double angleHoraire, double pi) { //calcul angle azimut angleAzi = 180/pi*acos((sin(declinaison) - sin(pi/180*angleAlt)*sin(latitude))/(cos(pi/180*angleAlt)*cos(latitude))); //calcul signe azimut if (sin(pi/180*angleHoraire)>0) { angleAzi = 360 - angleAzi; } return angleAzi; }
-----