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 | |
---|
34 | using namespace std; |
---|
35 | |
---|
36 | struct Coord |
---|
37 | { |
---|
38 | double x; |
---|
39 | double y; |
---|
40 | double z; |
---|
41 | }; |
---|
42 | |
---|
43 | class Alignement : public Astro, public Logs |
---|
44 | { |
---|
45 | public: |
---|
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 |
---|