Changeset 688 for BAORadio/libindi/libindi/communs/alignement.cpp
- Timestamp:
- Jun 8, 2012, 4:05:59 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BAORadio/libindi/libindi/communs/alignement.cpp
r685 r688 125 125 MATRICE[2][3] = 0.0; 126 126 MATRICE[3][3] = 1.0; 127 } 128 129 void 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); 127 161 } 128 162 … … 388 422 // Calcul du vecteur offset sur le ciel 389 423 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])); 392 426 393 427 if (x + y == 0 ) … … 417 451 inline int Alignement::ElementsMatriceSimple(Coord aa1, Coord aa2, Coord aa3, Coord mm1, Coord mm2, Coord mm3) 418 452 { 419 // On se retouvre à devoir résoudre les equations:420 421 453 // mm1 = aa1 * MATRICE_Correction 422 454 // mm2 = aa2 * MATRICE_Correction 423 455 // mm3 = aa3 * MATRICE_Correction 424 456 425 // et donc Ãtrouver les éléments de la matrice MATRICE_Correction en fonction des paramÚtres x, y, z des vecteurs457 // On doit donc trouver les éléments de la matrice MATRICE_Correction en fonction des paramÚtres x, y, z des vecteurs 426 458 // aa1, aa2, aa3, mm1, mm2, mm3 427 459 428 // Les éléments de la matrice se trouvent aisément 460 // Les éléments de la matrice se trouvent aisément : 429 461 430 462 double div= aa1.z*aa2.y*aa3.x - aa1.y*aa2.z*aa3.x - aa1.z*aa2.x*aa3.y + … … 582 614 583 615 616 /************************************************************************************** 617 ** Projection simple d'un point situé aux coordonnées (az, ha) dans un cercle de 618 ** rayon Pi / 2 619 ** 620 ***************************************************************************************/ 584 621 585 622 void Alignement::AzHa2XY(double az, double ha, double *x, double *y) … … 591 628 *y = r * sin(az); 592 629 } 630 593 631 594 632 /************************************************************************************** … … 645 683 } 646 684 685 686 /************************************************************************************** 687 ** Initialise les cotes de l'instrument 688 ** 689 ***************************************************************************************/ 647 690 648 691 void Alignement::InitParametresInstrument() … … 655 698 AE = AE0; 656 699 I0 = I00; 657 Th au = Thau0;700 Theta = Theta0; 658 701 CoeffMoteur = CoeffMoteur0; 659 702 } 660 703 661 704 705 706 /************************************************************************************** 707 ** Convertit un nombre de pas en hauteur en un angle exprimé en degrés 708 ** 709 ***************************************************************************************/ 710 662 711 double Alignement::Motor2Alt(double pas) 663 712 { 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 ***************************************************************************************/ 666 721 667 722 double Alignement::Alt2Motor(double targetAlt) … … 679 734 double CD2pBC2 = CD * CD + BC * BC; 680 735 681 double I2 = -2.0 * ED * sqrt( CD2pBC2 ) * sin( ( targetAlt - Th au) * Pidiv180 );736 double I2 = -2.0 * ED * sqrt( CD2pBC2 ) * sin( ( targetAlt - Theta ) * Pidiv180 ); 682 737 683 738 I2 += ED * ED + CD2pBC2 - AE *AE; … … 702 757 // double memI0 = I00; 703 758 double memCoeffMoteur = CoeffMoteur0; 704 double memTh au = Thau0;759 double memTheta = Theta0; 705 760 706 761 stringstream os; … … 715 770 716 771 InitParametresInstrument(); 717 718 772 719 773 … … 752 806 753 807 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 */ 759 813 for (i=-interv; i< interv; i += pas) 760 814 { 761 CoeffMoteur = CoeffMoteur0 + i /100.0;815 CoeffMoteur = CoeffMoteur0 + i / 100.0; 762 816 763 817 for (j=-interv; j<interv; j += pas) … … 773 827 BC = BC0 + l; 774 828 775 Th au= (atan(CD / BC) - atan(18.5 / ED))* N180divPi;829 Theta = (atan(CD / BC) - atan(18.5 / ED))* N180divPi; 776 830 777 831 for (m=-interv; m< interv; m += pas) … … 810 864 os << "Determinant=" << det << "\n"; 811 865 812 os << "CD=" << CD << " ED=" << ED << " BC=" << BC << " AE=" << AE << " Th au=" << Thau<< " CoeffMoteur=" << CoeffMoteur << "\n\n";866 os << "CD=" << CD << " ED=" << ED << " BC=" << BC << " AE=" << AE << " Theta=" << Theta << " CoeffMoteur=" << CoeffMoteur << "\n\n"; 813 867 814 868 AfficherLog(os.str(), true); … … 820 874 memAE = AE; 821 875 memBC = BC; 822 memTh au = Thau;876 memTheta = Theta; 823 877 memCoeffMoteur = CoeffMoteur; 824 878 } … … 828 882 } 829 883 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 } 831 890 } 832 891 … … 838 897 AE = memAE; 839 898 BC = memBC; 840 Th au = memThau;899 Theta = memTheta; 841 900 CoeffMoteur = memCoeffMoteur; 842 901 … … 866 925 Matrice_ok = ElementsMatriceSimple(c1, c2, c3 ,mm1, mm2, mm3); 867 926 868 det = Determinant(); 869 870 871 872 os << "Determinant=" << det << "\n"; 873 874 875 AfficherLog(os.str(), true); 876 877 878 927 AfficherMatrice(); 879 928 } 880 929 … … 932 981 distances = new double [nbrcorrections+1]; 933 982 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"; 935 987 936 988 Azimut(ar * 15.0 * Pidiv180, dec * Pidiv180, &a2, &b2); … … 1099 1151 } 1100 1152 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(); 1109 1158 1110 1159 … … 1114 1163 SelectionnePourCalculMatrice[map[best2]] = true; 1115 1164 SelectionnePourCalculMatrice[map[best3]] = true; 1116 1117 1118 //Afficher les messages de cette fonction1119 1120 AfficherLog(os.str(), true);1121 1165 } 1122 1166
Note: See TracChangeset
for help on using the changeset viewer.