Changeset 427 in Sophya


Ignore:
Timestamp:
Sep 24, 1999, 9:16:54 AM (26 years ago)
Author:
ansari
Message:

correction cmv azimut galaxie

Location:
trunk/Poubelle/archTOI.old
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Poubelle/archTOI.old/plgalcross.cc

    r423 r427  
    55#include <math.h>
    66
    7 #ifndef M_PI
    8 #define M_PI 3.14159265358979
    9 #endif
    10 
    11 #ifndef M_2PI
    12 #define M_2PI (2*M_PI)
    13 #endif
    14 
    157#include "plgalcross.h"
    168
    179//////////////////////////////////////////////////////////////////////////
    18 // Pour calculer les azimuth d'intersection d'une direction avec
     10// Pour calculer les azimuth (E of N) d'intersection d'une direction avec
    1911// le plan galactique:
    2012// ---- INPUT:
     
    3022//                   soit  (12h 51mn 30s, +27d 07' 42", 2000)
    3123// ---- OUTPUT:
    32 // azCr1,2 : azimuths d'intersection du plan definit au dessus
     24// azCr1,2 : azimuths (E of N) d'intersection du plan definit au dessus
    3325//           avec le cercle balaye par l'axe du detecteur
    3426//           (degres decimaux [0,360[)
     
    7870// - Equation de la droite d'intersection du plan avec le plan du cercle:
    7971//            a*x + b*y + c*z = 0 avec z=sin(hRot)
    80 double R2=cos(hRot); R2*=R2;
     72double ch=cos(hRot);
    8173double z=sin(hRot), chG=cos(hG), shG=sin(hG);
    82 if(R2<SMALL_ANGLE_2) {
    83   // R2=0 : le detecteur ne tourne pas (zRot==0 ou 180),
     74if(ch*ch<SMALL_ANGLE_2) {
     75  // ch=0 : le detecteur ne tourne pas (zRot==0 ou 180),
    8476  // il est selon l'axe OZ ou -OZ. Une seule solution possible
    8577  // si le plan passe par le pole cad si hG==0 et l'azimuth
     
    9284  if(z*z<SMALL_ANGLE_2) return 3; else return 1;
    9385} else {
    94   double a=chG*cos(aG), b=-chG*sin(aG), cz=shG*z;
     86  double a=chG*cos(aG), b=-chG*sin(aG), cz=shG*z, R2=ch*ch;
    9587  //Stabilite numerique: |b|>|a| on resoud pour "x" sinon pour "y"
    9688  // **** cas 1-/ |b|>|a|  :  droite y = -(a/b)*x-cz/b
     
    10496  //      cas 1-/ x1,x2 ==> y = -(a/b)*x-cz/b ==> y1,y2
    10597  //      cas 2-/ y1,y2 ==> x = -(b/a)*x-cz/a ==> x1,x2
    106   // **** Azimuth: az=atan2(-y,x) (car sens retrograde cf eq OM=|...|)
     98  // **** Azimuth: az=atan2(-y/cos(hRot),x/cos(hRot))
     99  //               (car sens retrograde cf eq OM=|...|)
    107100  bool calcx = (fabs(b)>fabs(a))? true: false;
    108101  double A,B,C;
     
    117110     else   {y1=sol1; y2=sol2; x1=-b/a*y1-cz/a; x2=-b/a*y2-cz/a;}
    118111  // Calcul des azimuths
    119   azCr1 = atan2(-y1,x1); azCr2 = atan2(-y2,x2);
     112  azCr1 = atan2(-y1/ch,x1/ch); azCr2 = atan2(-y2/ch,x2/ch);
    120113  // on convertit en degres decimaux
    121114  azCr1 *= DEG_IN_RADIAN; azCr2 *= DEG_IN_RADIAN;
     
    140133//   latitude : latitude du lieu en degre [-90,90] decimaux
    141134// OUTPUT: les coordonnees horizontales:
    142 //   azimuth : azimuth degre [0,360[ decimaux
     135//   azimuth : azimuth (E of N) degre [0,360[ decimaux
     136//             ici compte + dans sens retrograde avec origine au Nord,
     137//             azimuth "des marins" (serveur BDL, USNO, xephem , skycalc...)
    143138//   elevation : elevation degre [-90,90] decimaux
    144139//               (distance zenithale z = 90-elevation)
    145140// RETURN: 0 si Ok, 1 si probleme
    146 // TRANSFO:
     141// TRANSFO: (dans cette formule l'origine des azimuths est au Sud,
     142//           azimut "des astronomes" ou  (E of S))
    147143// sin(azi) cos(elev) = sin(ha) cos(dec)
    148144// cos(azi) cos(elev) = cos(ha) cos(dec) sin(lat) - sin(dec) cos(lat)
    149145//          sin(elev) = cos(ha) cos(dec) cos(lat) + sin(dec) sin(lat)
    150 // avec azi=azimuth, elev=elevation, lat=latitude,
     146// avec azi=azimuth (E of S), elev=elevation, lat=latitude,
    151147//      dec=declinaison, ha=angle horaire=tsid-alpha
     148// Puis azi(E of S) = azi(E of N) + Pi
    152149{
    153150azimuth = elevation = 0.;
     
    167164elevation = ch*cd*cl+sl*sd;
    168165if(elevation<-1.) elevation=-1.; if(elevation>1.) elevation=1.;
    169 elevation = asin(elevation); //entre [-Pi,Pi]
     166elevation = asin(elevation); //entre [-Pi/2,Pi/2]
    170167
    171168// calcul de l'azimuth
    172 if(fabs(cos(elevation))<SMALL_ANGLE) { //elevation=-Pi/2 ou Pi/2
     169double ce = cos(elevation);
     170if(fabs(ce)<SMALL_ANGLE) { //elevation=-Pi/2 ou Pi/2
    173171  azimuth = 0.; //azimuth indifferent
    174172} else {
    175   azimuth = atan2(sh*cd,ch*cd*sl-sd*cl); //entre -Pi et +Pi
    176   if(azimuth<0.) azimuth += M_2PI; //remise azimuth entre 0 et 2Pi
     173  azimuth = atan2(sh*cd/ce,(ch*cd*sl-sd*cl)/ce); //entre -Pi et +Pi
     174  azimuth += M_PI; //azimuth (E of S) -> (E of N)
    177175}
    178176
     
    217215// | vp[2] |   | sin(dp)         |
    218216dp = asin(vp[2]); // asin retourne entre -Pi/2 et Pi/2 ... Ok
    219 nvp = cos(dp);
    220 if(fabs(nvp)<1.e-30) { // cas ou dp=+Pi/2 ou -Pi/2, ap est indifferent
     217double cdp = cos(dp);
     218if(fabs(cdp)<SMALL_ANGLE) { // cas ou dp=+Pi/2 ou -Pi/2, ap est indifferent
    221219  ap = 0.;
    222220} else {
    223   ap = atan2(vp[1],vp[0]); // renvoie entre -Pi et +Pi
     221  ap = atan2(vp[1]/cdp,vp[0]/cdp); // renvoie entre -Pi et +Pi
    224222  if(ap<0.) ap += M_2PI;
    225223}
  • trunk/Poubelle/archTOI.old/plgalcross.h

    r423 r427  
    88              ,double& azCr1,double& azCr2);
    99int EquatToHoriz(double alpha,double delta,double TSid,double latitude
    10                 ,double& azimuth,double& hauteur);
     10                ,double& azimuth,double& elevation);
    1111int FindPerpEquat(double a1,double d1,double a2,double d2,double& ap,double& dp);
Note: See TracChangeset for help on using the changeset viewer.