source: BAORadio/libindi/libindi/communs/alignement.h @ 684

Last change on this file since 684 was 684, checked in by frichard, 12 years ago
File size: 5.1 KB
Line 
1////////////////////////////////
2// Classe Alignement          //
3// Franck RICHARD             //
4// BAORadio                   //
5// franckrichard033@gmail.com //
6// février 2012               //
7////////////////////////////////
8
9
10
11#ifndef Alignement_class
12#define Alignement_class
13
14#include <stdio.h>
15#include <stdlib.h>
16#include <string.h>
17#include <stdarg.h>
18#include <math.h>
19#include <unistd.h>
20#include <time.h>
21#include <memory>
22#include <pthread.h>
23#include <iostream>
24#include <time.h>
25#include <unistd.h>
26#include <sys/time.h>
27#include <fstream>
28#include "../communs/const.h"
29#include "../communs/filetools.h"
30#include "../communs/astro.h"
31#include "../communs/logs.h"
32
33
34using namespace std;
35
36struct Coord
37{
38    double x;
39    double y;
40    double z;
41};
42
43class Alignement : public Astro, public Logs
44{
45public:
46    Alignement();
47    ~Alignement();
48
49    void InitAlignement();
50    void TransmettreParametresClasseAstro(double Annee, double Mois, double Jour, double Heu, double Min, double Sec, double Longitude, double Latitude, double Pression, double Temp);
51
52
53    /*******************************************************/
54    /* Gestion des fichiers de paramÚtres
55    ********************************************************/
56    bool is_readable( const std::string & file );
57    bool ChargementParametresAlignement(string IP, string fileName, double ad, double de);
58
59    // bool ChargementParametresAlignement(string fileName, int ip, int num);
60    bool EnregistrementParametresAlignement(string IP, string fileName);
61    bool EnregistrementParametresAlignement(int IP, string fileName);
62
63
64
65    /*******************************************************/
66    /* Calcul des matrices
67    ********************************************************/
68
69    //Réinitialisation MATRICE = Matrice identité
70    void Identity();
71    void RotationAutourDunAxe(double t, double r, double alpha);
72
73    // Méthode de correction "simple
74    inline int Calculer_Matrice_Simple( Coord a1, Coord a2, Coord a3, Coord m1, Coord m2, Coord m3);
75    inline int ElementsMatriceSimple(Coord aa1, Coord aa2, Coord aa3, Coord mm1, Coord mm2, Coord mm3);
76    void AppliquerMatriceCorrectionSimple( Coord * result, Coord vect);
77
78
79    // Méthode de correction "affine"
80    void Calculer_Matrice_GETPQ(Coord p1, Coord p2, Coord p3);
81    int  Calculer_Matrice_Affine(double x, double y, Coord a1, Coord a2, Coord a3, Coord m1, Coord m2, Coord m3);
82    void AppliquerMatriceCorrectionAffine( Coord* result, Coord ob);
83
84    // Méthode correction "Taki"
85    void Calculer_Matrice_LMN(Coord p1, Coord p2, Coord p3);
86    int  Calculer_Matrice_Taki(double x, double Y, Coord a1, Coord a2, Coord a3, Coord m1, Coord m2, Coord m3);
87    void AppliquerMatriceCorrectionTaki(Coord * result, Coord vect);
88
89
90    void CalculerMatriceCorrection(double ad, double de);
91
92
93    double Surface_Triangle(double px1, double py1, double px2, double py2, double px3, double py3);
94    void   AzHa2XY(double az, double ha, double *x, double *y);
95    bool   PointSitueDansSurfaceTriangle(double px, double py, double px1, double py1, double px2, double py2, double px3, double py3);
96
97    inline double Determinant();
98    void   InitParametresInstrument();
99    void   OptimisationGeometrieAntenne();
100    double Alt2Motor(double targetAlt);
101    inline double Motor2Alt(double pas);
102
103
104
105    int MethodeAlignement;                      // Méthode d'alignement utilisée
106
107    int nbrcorrections;                         // Nombre de points utilisés pour bâtir la ou les matrices de correction
108
109    int AlignementEnCours;
110
111    bool Matrice_ok;                            // Il existe une matrice de correction applicable à la direction de l'observation
112
113    long delta_az_polar;                        // Correction en azimut de l'orientation de l'étoile polaire
114    // C'est la premiÚre étape de l'alignement dans les mode AFFINE et TAKI
115
116    long int deltaAZ;                           // delta en azimut et en hauteur pour une correction à la raquette
117    long int deltaHA;                           // hors procédure d'alignement
118
119    bool SelectionnePourCalculMatrice[MAXALIGNEMENTANTENNE];
120
121    double ad[MAXALIGNEMENTANTENNE];            // Coordonnées horaires d'un point de correction
122
123    double de[MAXALIGNEMENTANTENNE];
124
125    double tsl[MAXALIGNEMENTANTENNE];           // Temps sidéral local où les mesures en ar et dec ont été faites
126
127    double delta_ad[MAXALIGNEMENTANTENNE];        // nbre de pas ajoutés en ascension droite et en déclinaison pour centrer l'objet visé
128
129    double delta_de[MAXALIGNEMENTANTENNE];
130
131    double MATRICE[4][4];                       // La matrices de correction calculée dans les trois modes d'alignement
132
133    Coord  VECT_OFFSET;                      // Vecteur offset que l'on applique dans les modes affine/taki
134
135    double GETLMN[4][4];                        // Matrices intermédiaires nécessaires pour le calcul des matrices de correction
136    // dans les modes d'alignement AFFINE/TAKI
137    double GETPQ[4][4];
138
139
140    double BC;                          //ParamÚtres de l'instrument
141    // Formule de Marc
142    double CD;
143    double ED;
144    double AE;
145    double I0;
146    double CoeffMoteur;
147    double Thau;
148
149};
150
151#endif
Note: See TracBrowser for help on using the repository browser.