Ignore:
Timestamp:
Jun 8, 2012, 4:05:59 PM (12 years ago)
Author:
frichard
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • BAORadio/libindi/libindi/communs/alignement.cpp

    r685 r688  
    125125    MATRICE[2][3] = 0.0;
    126126    MATRICE[3][3] = 1.0;
     127}
     128
     129void Alignement::AfficherMatrice()
     130{
     131    stringstream os;
     132
     133    os.str("");
     134
     135    // Affiche de la matrice pour vérif
     136
     137    os << "\nCalcul de la matrice de correction:\n";
     138    os.width(15);
     139    os << MATRICE[1][1];
     140    os.width(15);
     141    os << MATRICE[2][1];
     142    os.width(15);
     143    os << MATRICE[3][1];
     144    os << "\n";
     145    os.width(15);
     146    os << MATRICE[1][2];
     147    os.width(15);
     148    os << MATRICE[2][2];
     149    os.width(15);
     150    os << MATRICE[3][2];
     151    os << "\n";
     152    os.width(15);
     153    os << MATRICE[1][3];
     154    os.width(15);
     155    os << MATRICE[2][3];
     156    os.width(15);
     157    os << MATRICE[3][3];
     158    os << "\n\nDeterminant :" << Determinant() << "\n";
     159
     160    AfficherLog(os.str(), true);
    127161}
    128162
     
    388422    // Calcul du vecteur offset sur le ciel
    389423
    390     VECT_OFFSET.x =0.0;//m1.x - ((a1.x * MATRICE[1][1]) + (a1.y * MATRICE[2][1]));
    391     VECT_OFFSET.y =0.0;//m1.y - ((a1.x * MATRICE[1][2]) + (a1.y * MATRICE[2][2]));
     424    VECT_OFFSET.x =m1.x - ((a1.x * MATRICE[1][1]) + (a1.y * MATRICE[2][1]));
     425    VECT_OFFSET.y =m1.y - ((a1.x * MATRICE[1][2]) + (a1.y * MATRICE[2][2]));
    392426
    393427    if (x + y == 0 )
     
    417451inline int Alignement::ElementsMatriceSimple(Coord aa1, Coord aa2, Coord aa3, Coord mm1, Coord mm2, Coord mm3)
    418452{
    419 // On se retouvre à devoir résoudre les equations:
    420 
    421453    // mm1 = aa1 * MATRICE_Correction
    422454    // mm2 = aa2 * MATRICE_Correction
    423455    // mm3 = aa3 * MATRICE_Correction
    424456
    425     // et donc à trouver les éléments de la matrice MATRICE_Correction en fonction des paramÚtres x, y, z des vecteurs
     457    // On doit donc trouver les éléments de la matrice MATRICE_Correction en fonction des paramÚtres x, y, z des vecteurs
    426458    // aa1, aa2, aa3, mm1, mm2, mm3
    427459
    428     // Les éléments de la matrice se trouvent aisément
     460    // Les éléments de la matrice se trouvent aisément :
    429461
    430462    double div= aa1.z*aa2.y*aa3.x - aa1.y*aa2.z*aa3.x - aa1.z*aa2.x*aa3.y +
     
    582614
    583615
     616/**************************************************************************************
     617** Projection simple d'un point situé aux coordonnées (az, ha) dans un cercle de
     618** rayon Pi / 2
     619**
     620***************************************************************************************/
    584621
    585622void Alignement::AzHa2XY(double az, double ha, double *x, double *y)
     
    591628    *y = r * sin(az);
    592629}
     630
    593631
    594632/**************************************************************************************
     
    645683}
    646684
     685
     686/**************************************************************************************
     687** Initialise les cotes de l'instrument
     688**
     689***************************************************************************************/
    647690
    648691void Alignement::InitParametresInstrument()
     
    655698    AE          = AE0;
    656699    I0          = I00;
    657     Thau        = Thau0;
     700    Theta       = Theta0;
    658701    CoeffMoteur = CoeffMoteur0;
    659702}
    660703
    661704
     705
     706/**************************************************************************************
     707** Convertit un nombre de pas en hauteur en un angle exprimé en degrés
     708**
     709***************************************************************************************/
     710
    662711double Alignement::Motor2Alt(double pas)
    663712{
    664     return asin(( - pow( ( pas * CoeffMoteur0 ) + I00, 2.0 ) + 128279.4) / 129723.4 ) * N180divPi + Thau0;
    665 }
     713    return asin(( - pow( ( pas * CoeffMoteur0 ) + I00, 2.0 ) + 128279.4) / 129723.4 ) * N180divPi + Theta0;
     714}
     715
     716
     717/**************************************************************************************
     718** Convertit une hauteur (exprimée en degrés) en nombre de pas codeur
     719**
     720***************************************************************************************/
    666721
    667722double Alignement::Alt2Motor(double targetAlt)
     
    679734    double CD2pBC2 = CD * CD + BC * BC;
    680735
    681     double I2 = -2.0 * ED * sqrt( CD2pBC2 ) * sin(  ( targetAlt - Thau ) * Pidiv180 );
     736    double I2 = -2.0 * ED * sqrt( CD2pBC2 ) * sin(  ( targetAlt - Theta ) * Pidiv180 );
    682737
    683738    I2 += ED * ED + CD2pBC2 - AE *AE;
     
    702757    // double memI0 = I00;
    703758    double memCoeffMoteur = CoeffMoteur0;
    704     double memThau = Thau0;
     759    double memTheta = Theta0;
    705760
    706761    stringstream os;
     
    715770
    716771    InitParametresInstrument();
    717 
    718772
    719773
     
    752806
    753807
    754     os << "m1=" << delta_de[0] << "   m11=" <<  Motor2Alt(Alt2Motor(delta_de[0])) << "\n";
    755 
    756     AfficherLog(os.str(), true);
    757     os.str("");
    758 
     808    /*  os << "m1=" << delta_de[0] << "   m11=" <<  Motor2Alt(Alt2Motor(delta_de[0])) << "\n";
     809
     810      AfficherLog(os.str(), true);
     811      os.str("");
     812    */
    759813    for (i=-interv; i< interv; i += pas)
    760814    {
    761         CoeffMoteur = CoeffMoteur0 + i/100.0;
     815        CoeffMoteur = CoeffMoteur0 + i / 100.0;
    762816
    763817        for (j=-interv; j<interv; j += pas)
     
    773827                    BC = BC0 + l;
    774828
    775                     Thau = (atan(CD / BC) - atan(18.5 / ED))* N180divPi;
     829                    Theta = (atan(CD / BC) - atan(18.5 / ED))* N180divPi;
    776830
    777831                    for (m=-interv; m< interv; m += pas)
     
    810864                            os << "Determinant=" << det << "\n";
    811865
    812                             os << "CD=" << CD << " ED=" << ED << " BC=" << BC << " AE=" << AE << " Thau=" << Thau << " CoeffMoteur=" << CoeffMoteur << "\n\n";
     866                            os << "CD=" << CD << " ED=" << ED << " BC=" << BC << " AE=" << AE << " Theta=" << Theta << " CoeffMoteur=" << CoeffMoteur << "\n\n";
    813867
    814868                            AfficherLog(os.str(), true);
     
    820874                            memAE = AE;
    821875                            memBC = BC;
    822                             memThau = Thau;
     876                            memTheta = Theta;
    823877                            memCoeffMoteur = CoeffMoteur;
    824878                        }
     
    828882        }
    829883
    830         AfficherLog("*\n", true);
     884        if ((int)Arrondi((interv - i) / (2.0 * interv) * 100.0) % 10 == 0)
     885        {
     886            os.str("");
     887            os << 100.0 - (interv - i) / (2.0 * interv) * 100.0 << " %\n";
     888            AfficherLog(os.str(), true);
     889        }
    831890    }
    832891
     
    838897    AE = memAE;
    839898    BC = memBC;
    840     Thau = memThau;
     899    Theta = memTheta;
    841900    CoeffMoteur = memCoeffMoteur;
    842901
     
    866925    Matrice_ok = ElementsMatriceSimple(c1, c2, c3 ,mm1, mm2, mm3);
    867926
    868     det = Determinant();
    869 
    870 
    871 
    872     os << "Determinant=" << det << "\n";
    873 
    874 
    875     AfficherLog(os.str(), true);
    876 
    877 
    878 
     927    AfficherMatrice();
    879928}
    880929
     
    932981        distances = new double [nbrcorrections+1];
    933982
    934         os << "Coordonnées visees : ad=" << DHMS(ar * 15.0,true) << "  de=" << DHMS(dec,false) << "\n";
     983        os << "Coordonnées visees : ad=" << DHMS(ar * 15.0
     984
     985
     986                ,true) << "  de=" << DHMS(dec,false) << "\n";
    935987
    936988        Azimut(ar * 15.0 * Pidiv180, dec * Pidiv180, &a2, &b2);
     
    10991151    }
    11001152
    1101 
    1102     // Affiche de la matrice pour vérif
    1103 
    1104     os << "\nCalcul de la matrice de correction:\n";
    1105     os << MATRICE[1][1] << "   \t" << MATRICE[2][1] << "    \t" << MATRICE[3][1] << "\n";
    1106     os << MATRICE[1][2] << "   \t" << MATRICE[2][2] << "    \t" << MATRICE[3][2] << "\n";
    1107     os << MATRICE[1][3] << "   \t" << MATRICE[2][3] << "    \t" << MATRICE[3][3] << "\n";
    1108     os << "\nDeterminant :" << Determinant() << "\n";
     1153    //Afficher les messages de cette fonction
     1154
     1155    AfficherLog(os.str(), true);
     1156
     1157    AfficherMatrice();
    11091158
    11101159
     
    11141163    SelectionnePourCalculMatrice[map[best2]] = true;
    11151164    SelectionnePourCalculMatrice[map[best3]] = true;
    1116 
    1117 
    1118     //Afficher les messages de cette fonction
    1119 
    1120     AfficherLog(os.str(), true);
    11211165}
    11221166
Note: See TracChangeset for help on using the changeset viewer.