• # Formule

    Posté par . En réponse au message Tracker solaire : Données de position du soleil. Évalué à 9.

    C'est facile à calculer. La formule en C :

    struct Soleil{double dec;double ra;double eot;double h;double z;};
    /*------------------------------------------------------------------------
     fonction: soleil()
     Objet: Calcule les paramètres de navigation du Soleil
     Entrée: Nombre de secondes depuis le 1er janvier 1970
     Longitude en radians
     Latitude en radians
     Utilise la fonction reduc()
     Sortie: dec Déclinaison, ra Ascension droite, h Hauteur et z Azimut en
     radians
     eot Équation du temps en minutes
     ------------------------------------------------------------------------*/
    struct Soleil soleil(long temps,double longitude,double latitude)
    {
     struct Soleil solar;
     struct tm gmt;
     double T,g,Lm,Lt,e,gha;
     T=temps/86400.0-10957.5;
     g = 1.720197034e-2 * T - 4.314453911e-2;
     Lm = 1.720279239e-2 * T - 1.388224066;
     Lt=Lm+3.342305518e-2*sin(g)+3.490658504e-4*sin(2*g);
     e=.4090877234-6.981317008e-9*T;
     solar.dec=asin(sin(Lt)*sin(e));
     solar.ra=2*atan(cos(e)*sin(Lt)/(cos(solar.dec)+cos(Lt)));
     gmt=*gmtime(&temps);
     gha=1.720279239e-2*T+.2617993878*(gmt.tm_hour+gmt.tm_min/60.0+gmt.tm_sec/3600.0)+1.753361257-solar.ra;
     solar.eot=229.1831181*(fmod(Lm,2*M_PI)-fmod(solar.ra,2*M_PI));//Equation du temps en minutes
     solar.h=asin(sin(latitude)*sin(solar.dec)+cos(latitude)*cos(solar.dec)*cos(gha+longitude));
     solar.z=acos((sin(solar.dec)-sin (latitude)*sin(solar.h))/cos(latitude)/cos(solar.h));
     if (sin(gha+longitude)>0) solar.z=2*M_PI-solar.z;
     return solar;
    }