Changeset 682 for BAORadio/libindi
- Timestamp:
- May 24, 2012, 5:19:03 PM (12 years ago)
- Location:
- BAORadio/libindi/libindi
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
BAORadio/libindi/libindi/communs/alignement.cpp
r677 r682 9 9 10 10 #include "alignement.h" 11 #include <QtCore/qvariant.h> 11 12 12 13 … … 21 22 22 23 InitAlignement(); 24 25 26 // initialisation des paramÚtres géométriques de l'antenne 27 28 InitParametresInstrument(); 23 29 } 24 30 … … 45 51 for (int i=0; i< MAXALIGNEMENTANTENNE; i++) 46 52 { 53 <<<<<<< .mine 54 ad[i] = 0.0; 55 de[i] = 0.0; 56 delta_ad[i] = 0.0; 57 delta_de[i] = 0.0; 58 tsl[i] = 0.0; 59 SelectionnePourCalculMatrice[i] = false; 60 ======= 47 61 ad[i] = 0.0; 48 62 de[i] = 0.0; … … 51 65 tsl[i] = 0.0; 52 66 SelectionnePourCalculMatrice[i] = false; 67 >>>>>>> .r680 53 68 } 54 69 … … 213 228 AzHa2XY(aa3.x, aa3.y, &a3.x, &a3.y); 214 229 230 <<<<<<< .mine 231 Coord a1, a2, a3, m1, m2, m3; 232 ======= 215 233 AzHa2XY(mm1.x, mm1.y, &m1.x, &m1.y); 216 234 AzHa2XY(mm2.x, mm2.y, &m2.x, &m2.y); … … 218 236 219 237 //construit les matrices EQLMN1 & 2 220 238 >>>>>>> .r680 239 240 <<<<<<< .mine 241 AzHa2XY(aa1.x, aa1.y, &a1.x, &a1.y); 242 AzHa2XY(aa2.x, aa2.y, &a2.x, &a2.y); 243 AzHa2XY(aa3.x, aa3.y, &a3.x, &a3.y); 244 ======= 221 245 Calculer_Matrice_LMN(m1, m2, m3); 222 246 >>>>>>> .r680 247 248 <<<<<<< .mine 249 AzHa2XY(mm1.x, mm1.y, &m1.x, &m1.y); 250 AzHa2XY(mm2.x, mm2.y, &m2.x, &m2.y); 251 AzHa2XY(mm3.x, mm3.y, &m3.x, &m3.y); 252 ======= 223 253 for (int i=1; i<=3; i++) for (int j=1; j<=3; j++) EQLMN1[i][j]=GETLMN[i][j]; 254 >>>>>>> .r680 255 256 <<<<<<< .mine 257 //construit les matrices EQLMN1 & 2 258 259 Calculer_Matrice_LMN(m1, m2, m3); 260 ======= 261 Calculer_Matrice_LMN(a1, a2, a3); 262 >>>>>>> .r680 263 264 <<<<<<< .mine 265 for (int i=1; i<=3; i++) for (int j=1; j<=3; j++) EQLMN1[i][j]=GETLMN[i][j]; 266 ======= 267 for (int i=1; i<=3; i++) for (int j=1; j<=3; j++) EQLMN2[i][j]=GETLMN[i][j]; 268 >>>>>>> .r680 224 269 225 270 Calculer_Matrice_LMN(a1, a2, a3); … … 332 377 double EQMQ[4][4]; 333 378 379 <<<<<<< .mine 380 Coord a1, a2, a3, m1, m2, m3, c1, c2; 381 ======= 334 382 Coord a1, a2, a3, m1, m2, m3, c1, c2; 335 383 … … 366 414 367 415 //Construit les matrices EQMP et EQMQ 368 416 >>>>>>> .r680 417 418 <<<<<<< .mine 419 AzHa2XY(aa1.x, aa1.y, &a1.x, &a1.y); 420 AzHa2XY(aa2.x, aa2.y, &a2.x, &a2.y); 421 AzHa2XY(aa3.x, aa3.y, &a3.x, &a3.y); 422 ======= 369 423 Calculer_Matrice_GETPQ(m1, m2, m3); 370 424 >>>>>>> .r680 425 426 <<<<<<< .mine 427 AzHa2XY(mm1.x, mm1.y, &m1.x, &m1.y); 428 AzHa2XY(mm2.x, mm2.y, &m2.x, &m2.y); 429 AzHa2XY(mm3.x, mm3.y, &m3.x, &m3.y); 430 ======= 371 431 for (int i=1; i<=3; i++) for (int j=1; j<=3; j++) EQMP[i][j]=GETPQ[i][j]; 432 >>>>>>> .r680 433 434 <<<<<<< .mine 435 436 //Construit les matrices EQMP et EQMQ 437 438 Calculer_Matrice_GETPQ(m1, m2, m3); 439 ======= 440 Calculer_Matrice_GETPQ(a1, a2, a3); 441 >>>>>>> .r680 442 443 <<<<<<< .mine 444 for (int i=1; i<=3; i++) for (int j=1; j<=3; j++) EQMP[i][j]=GETPQ[i][j]; 445 ======= 446 for (int i=1; i<=3; i++) for (int j=1; j<=3; j++) EQMQ[i][j]=GETPQ[i][j]; 447 >>>>>>> .r680 372 448 373 449 Calculer_Matrice_GETPQ(a1, a2, a3); … … 403 479 404 480 481 482 405 483 // Calcul du vecteur offset sur le ciel 406 484 … … 408 486 VECT_OFFSET.y =0.0;//m1.y - ((a1.x * MATRICE[1][2]) + (a1.y * MATRICE[2][2])); 409 487 488 <<<<<<< .mine 489 if (x + y == 0 ) 490 { 491 return 0; 492 } 493 else 494 { 495 return PointSitueDansSurfaceTriangle(x, y, aa1.x, aa1.y, aa2.x, aa2.y, aa3.x, aa3.y); 496 } 497 ======= 410 498 if (x + y == 0 ) 411 499 { … … 416 504 return PointSitueDansSurfaceTriangle(x, y, aa1.x, aa1.y, aa2.x, aa2.y, aa3.x, aa3.y); 417 505 } 506 >>>>>>> .r680 418 507 } 419 508 … … 432 521 433 522 523 inline int Alignement::ElementsMatriceSimple(Coord aa1, Coord aa2, Coord aa3, Coord mm1, Coord mm2, Coord mm3) 524 { 525 // On se retouvre à devoir résoudre les equations: 526 527 // mm1 = aa1 * MATRICE_Correction 528 // mm2 = aa2 * MATRICE_Correction 529 // mm3 = aa3 * MATRICE_Correction 530 531 // et donc à trouver les éléments de la matrice MATRICE_Correction en fonction des paramÚtres x, y, z des vecteurs 532 // aa1, aa2, aa3, mm1, mm2, mm3 533 534 // Les éléments de la matrice se trouvent aisément 535 536 double div= aa1.z*aa2.y*aa3.x - aa1.y*aa2.z*aa3.x - aa1.z*aa2.x*aa3.y + 537 aa1.x*aa2.z*aa3.y + aa1.y*aa2.x*aa3.z - aa1.x*aa2.y*aa3.z; 538 539 if ( div !=0.0 ) 540 { 541 double mm11 = -(((-aa2.z)*aa3.y*mm1.x + aa2.y*aa3.z*mm1.x + aa1.z*aa3.y*mm2.x - aa1.y*aa3.z*mm2.x - 542 aa1.z*aa2.y*mm3.x + aa1.y*aa2.z*mm3.x)/div); 543 544 double mm12 = -((aa2.z*aa3.x*mm1.x - aa2.x*aa3.z*mm1.x - aa1.z*aa3.x*mm2.x + aa1.x*aa3.z*mm2.x + aa1.z*aa2.x*mm3.x - aa1.x*aa2.z*mm3.x)/div); 545 546 double mm13 = -(((-aa2.y)*aa3.x*mm1.x + aa2.x*aa3.y*mm1.x + aa1.y*aa3.x*mm2.x - aa1.x*aa3.y*mm2.x - aa1.y*aa2.x*mm3.x + aa1.x*aa2.y*mm3.x)/div); 547 548 double mm21 = -(((-aa2.z)*aa3.y*mm1.y + aa2.y*aa3.z*mm1.y + aa1.z*aa3.y*mm2.y - aa1.y*aa3.z*mm2.y - 549 aa1.z*aa2.y*mm3.y + aa1.y*aa2.z*mm3.y)/div); 550 551 double mm22 = -((aa2.z*aa3.x*mm1.y - aa2.x*aa3.z*mm1.y - aa1.z*aa3.x*mm2.y + aa1.x*aa3.z*mm2.y + aa1.z*aa2.x*mm3.y - 552 aa1.x*aa2.z*mm3.y)/div); 553 554 double mm23 = -(((-aa2.y)*aa3.x*mm1.y + aa2.x*aa3.y*mm1.y + aa1.y*aa3.x*mm2.y - aa1.x*aa3.y*mm2.y - 555 aa1.y*aa2.x*mm3.y + aa1.x*aa2.y*mm3.y)/div); 556 557 double mm31 = -(((-aa2.z)*aa3.y*mm1.z + aa2.y*aa3.z*mm1.z + aa1.z*aa3.y*mm2.z - aa1.y*aa3.z*mm2.z - 558 aa1.z*aa2.y*mm3.z + aa1.y*aa2.z*mm3.z)/div); 559 560 double mm32 = -((aa2.z*aa3.x*mm1.z - aa2.x*aa3.z*mm1.z - aa1.z*aa3.x*mm2.z + aa1.x*aa3.z*mm2.z + aa1.z*aa2.x*mm3.z - 561 aa1.x*aa2.z*mm3.z)/div); 562 563 double mm33 = -(((-aa2.y)*aa3.x*mm1.z + aa2.x*aa3.y*mm1.z + aa1.y*aa3.x*mm2.z - aa1.x*aa3.y*mm2.z - 564 aa1.y*aa2.x*mm3.z + aa1.x*aa2.y*mm3.z)/div); 565 566 567 568 MATRICE[1][1] = mm11; 569 MATRICE[2][1] = mm12; 570 MATRICE[3][1] = mm13; 571 572 MATRICE[1][2] = mm21; 573 MATRICE[2][2] = mm22; 574 MATRICE[3][2] = mm23; 575 576 MATRICE[1][3] = mm31; 577 MATRICE[2][3] = mm32; 578 MATRICE[3][3] = mm33; 579 580 //Pour vérifs 581 //RotationAutourDunAxe(0.3,Pi/2.0-0.1, 0.2); 582 583 return 1; 584 } 585 else 586 { 587 return 0; 588 } 589 } 434 590 435 591 /************************************************************************************** … … 447 603 ***************************************************************************************/ 448 604 449 in t Alignement::Calculer_Matrice_Simple( Coord a1, Coord a2, Coord a3, Coord m1, Coord m2, Coord m3)605 inline int Alignement::Calculer_Matrice_Simple( Coord a1, Coord a2, Coord a3, Coord m1, Coord m2, Coord m3) 450 606 { 451 607 double x, y, z; … … 453 609 Coord aa1, aa2, aa3; 454 610 Coord mm1, mm2, mm3; 455 456 stringstream os;457 611 458 612 // Pour chaque variable coordonnées, on calcule d'abord l'azimut et la hauteur de l'objet correspondant … … 469 623 470 624 Azimut(a2.x, a2.y, &aa2.x, &aa2.y); 471 os << "a2.y " << a2.y << "\n";472 625 x=cos(aa2.x) * cos(aa2.y); 473 626 y=sin(aa2.x) * cos(aa2.y); … … 478 631 479 632 Azimut(a3.x, a3.y, &aa3.x, &aa3.y); 480 os << "a3.y " << a3.y << "\n";481 633 x=cos(aa3.x) * cos(aa3.y); 482 634 y=sin(aa3.x) * cos(aa3.y); … … 487 639 488 640 Azimut(m1.x, m1.y, &mm1.x, &mm1.y); 489 os << "m1.y " << m1.y << "\n";490 641 x=cos(mm1.x) * cos(mm1.y); 491 642 y=sin(mm1.x) * cos(mm1.y); … … 496 647 497 648 Azimut(m2.x, m2.y, &mm2.x, &mm2.y); 498 os << "m2.y " << m2.y << "\n";499 649 x=cos(mm2.x) * cos(mm2.y); 500 650 y=sin(mm2.x) * cos(mm2.y); … … 505 655 506 656 Azimut(m3.x, m3.y, &mm3.x, &mm3.y); 507 os << "m3.y " << m3.y << "\n";508 657 x=cos(mm3.x) * cos(mm3.y); 509 658 y=sin(mm3.x) * cos(mm3.y); … … 513 662 mm3.z=z; 514 663 515 // On se retouvre à devoir résoudre les equations: 516 517 // mm1 = aa1 * MATRICE_Correction 518 // mm2 = aa2 * MATRICE_Correction 519 // mm3 = aa3 * MATRICE_Correction 520 521 // et donc à trouver les éléments de la matrice MATRICE_Correction en fonction des paramÚtres x, y, z des vecteurs 522 // aa1, aa2, aa3, mm1, mm2, mm3 523 524 // Les éléments de la matrice se trouvent aisément 525 526 double div= aa1.z*aa2.y*aa3.x - aa1.y*aa2.z*aa3.x - aa1.z*aa2.x*aa3.y + 527 aa1.x*aa2.z*aa3.y + aa1.y*aa2.x*aa3.z - aa1.x*aa2.y*aa3.z; 528 529 if ( div !=0.0 ) 530 { 531 532 double mm11 = -(((-aa2.z)*aa3.y*mm1.x + aa2.y*aa3.z*mm1.x + aa1.z*aa3.y*mm2.x - aa1.y*aa3.z*mm2.x - 533 aa1.z*aa2.y*mm3.x + aa1.y*aa2.z*mm3.x)/div); 534 535 double mm12 = -((aa2.z*aa3.x*mm1.x - aa2.x*aa3.z*mm1.x - aa1.z*aa3.x*mm2.x + aa1.x*aa3.z*mm2.x + aa1.z*aa2.x*mm3.x - aa1.x*aa2.z*mm3.x)/div); 536 537 double mm13 = -(((-aa2.y)*aa3.x*mm1.x + aa2.x*aa3.y*mm1.x + aa1.y*aa3.x*mm2.x - aa1.x*aa3.y*mm2.x - aa1.y*aa2.x*mm3.x + aa1.x*aa2.y*mm3.x)/div); 538 539 double mm21 = -(((-aa2.z)*aa3.y*mm1.y + aa2.y*aa3.z*mm1.y + aa1.z*aa3.y*mm2.y - aa1.y*aa3.z*mm2.y - 540 aa1.z*aa2.y*mm3.y + aa1.y*aa2.z*mm3.y)/div); 541 542 double mm22 = -((aa2.z*aa3.x*mm1.y - aa2.x*aa3.z*mm1.y - aa1.z*aa3.x*mm2.y + aa1.x*aa3.z*mm2.y + aa1.z*aa2.x*mm3.y - 543 aa1.x*aa2.z*mm3.y)/div); 544 545 double mm23 = -(((-aa2.y)*aa3.x*mm1.y + aa2.x*aa3.y*mm1.y + aa1.y*aa3.x*mm2.y - aa1.x*aa3.y*mm2.y - 546 aa1.y*aa2.x*mm3.y + aa1.x*aa2.y*mm3.y)/div); 547 548 double mm31 = -(((-aa2.z)*aa3.y*mm1.z + aa2.y*aa3.z*mm1.z + aa1.z*aa3.y*mm2.z - aa1.y*aa3.z*mm2.z - 549 aa1.z*aa2.y*mm3.z + aa1.y*aa2.z*mm3.z)/div); 550 551 double mm32 = -((aa2.z*aa3.x*mm1.z - aa2.x*aa3.z*mm1.z - aa1.z*aa3.x*mm2.z + aa1.x*aa3.z*mm2.z + aa1.z*aa2.x*mm3.z - 552 aa1.x*aa2.z*mm3.z)/div); 553 554 double mm33 = -(((-aa2.y)*aa3.x*mm1.z + aa2.x*aa3.y*mm1.z + aa1.y*aa3.x*mm2.z - aa1.x*aa3.y*mm2.z - 555 aa1.y*aa2.x*mm3.z + aa1.x*aa2.y*mm3.z)/div); 556 557 558 559 MATRICE[1][1] = mm11; 560 MATRICE[2][1] = mm12; 561 MATRICE[3][1] = mm13; 562 563 MATRICE[1][2] = mm21; 564 MATRICE[2][2] = mm22; 565 MATRICE[3][2] = mm23; 566 567 MATRICE[1][3] = mm31; 568 MATRICE[2][3] = mm32; 569 MATRICE[3][3] = mm33; 570 571 //Pour vérifs 572 //RotationAutourDunAxe(0.3,Pi/2.0-0.1, 0.2); 573 574 return 1; 575 } 576 else 577 { 578 return 0; 579 } 664 return ElementsMatriceSimple(aa1, aa2, aa3, mm1, mm2, mm3); 580 665 } 581 666 … … 591 676 592 677 678 <<<<<<< .mine 679 double Alignement::Determinant() 680 { 681 double Det; 682 ======= 593 683 double Alignement::Determinant() 594 684 { … … 598 688 Det = Det - (MATRICE[1][2] * ((MATRICE[2][1] * MATRICE[3][3]) - (MATRICE[3][1] * MATRICE[2][3]))); 599 689 Det = Det + (MATRICE[1][3] * ((MATRICE[2][1] * MATRICE[3][2]) - (MATRICE[3][1] * MATRICE[2][2]))); 600 690 >>>>>>> .r680 691 692 <<<<<<< .mine 693 Det = MATRICE[1][1] * ((MATRICE[2][2] * MATRICE[3][3]) - (MATRICE[3][2] * MATRICE[2][ 3])); 694 Det = Det - (MATRICE[1][2] * ((MATRICE[2][1] * MATRICE[3][3]) - (MATRICE[3][1] * MATRICE[2][3]))); 695 Det = Det + (MATRICE[1][3] * ((MATRICE[2][1] * MATRICE[3][2]) - (MATRICE[3][1] * MATRICE[2][2]))); 696 ======= 601 697 return Det; 602 698 } 699 >>>>>>> .r680 700 701 <<<<<<< .mine 702 return Det; 703 } 603 704 604 705 … … 613 714 } 614 715 716 ======= 717 718 719 void Alignement::AzHa2XY(double az, double ha, double *x, double *y) 720 { 721 double r = Pidiv2 - ha; 722 723 *x = r * cos(az); 724 725 *y = r * sin(az); 726 } 727 728 >>>>>>> .r680 615 729 /************************************************************************************** 616 730 ** Calcule la surface d'un triangle de coordonnées (px1,py1) (px2, py2) (px3, py3) … … 624 738 double pxx1, pyy1, pxx2, pyy2, pxx3, pyy3; 625 739 740 <<<<<<< .mine 741 double pxx1, pyy1, pxx2, pyy2, pxx3, pyy3; 742 ======= 626 743 AzHa2XY(px1, py1, &pxx1, &pyy1); 744 >>>>>>> .r680 745 746 <<<<<<< .mine 747 AzHa2XY(px1, py1, &pxx1, &pyy1); 627 748 628 749 AzHa2XY(px2, py2, &pxx2, &pyy2); 629 750 630 751 AzHa2XY(px3, py3, &pxx3, &pyy3); 631 752 632 753 ta = (((pxx2 * pyy1) - (pxx1 * pyy2)) ) + (((pxx3 * pyy2) - (pxx2 * pyy3)) ) + (((pxx1 * pyy3) - (pxx3 * pyy1)) ); 633 754 755 ======= 756 AzHa2XY(px2, py2, &pxx2, &pyy2); 757 758 AzHa2XY(px3, py3, &pxx3, &pyy3); 759 760 ta = (((pxx2 * pyy1) - (pxx1 * pyy2)) ) + (((pxx3 * pyy2) - (pxx2 * pyy3)) ) + (((pxx1 * pyy3) - (pxx3 * pyy1)) ); 761 762 >>>>>>> .r680 634 763 return fabs(ta) / 2.0; 635 764 } … … 659 788 AfficherLog(os.str().c_str(), true); 660 789 790 <<<<<<< .mine 791 /* if ( DistanceAngulaireEntre2Points(px, py, px1, py1) > 1.2 ) return false; 792 if ( DistanceAngulaireEntre2Points(px, py, px2, py2) > 1.2 ) return false; 793 if ( DistanceAngulaireEntre2Points(px, py, px3, py3) > 1.2 ) return false;*/ 794 ======= 661 795 /* if ( DistanceAngulaireEntre2Points(px, py, px1, py1) > 1.2 ) return false; 662 796 if ( DistanceAngulaireEntre2Points(px, py, px2, py2) > 1.2 ) return false; 663 797 if ( DistanceAngulaireEntre2Points(px, py, px3, py3) > 1.2 ) return false;*/ 798 >>>>>>> .r680 664 799 665 800 return ( fabs(ta - t1 - t2 - t3) < 1e-10 ); 666 801 } 802 803 804 void Alignement::InitParametresInstrument() 805 { 806 //paramÚtres de l'instrument 807 808 ED = ED0; 809 CD = CD0; 810 BC = BC0; 811 AE = AE0; 812 I0 = I00; 813 Thau = Thau0; 814 CoeffMoteur = CoeffMoteur0; 815 } 816 817 818 double Alignement::Motor2Alt(double pas) 819 { 820 return asin(( - pow( ( pas * CoeffMoteur0 ) + I00, 2.0 ) + 128279.4) / 129723.4 ) * N180divPi + Thau0; 821 } 822 823 double Alignement::Alt2Motor(double targetAlt) 824 { 825 /* double I0 = 81.0; 826 827 double I2 = 128279.4 - 129723.4 * sin( (targetAlt - 20.2345) * Pidiv180 ); 828 829 double Codalt = (sqrt(I2) - I0) / 0.078947; 830 831 AfficherLog("calcul 1 =%5.0f\n", Codalt);*/ 832 833 834 835 double CD2pBC2 = CD * CD + BC * BC; 836 837 double I2 = -2.0 * ED * sqrt( CD2pBC2 ) * sin( ( targetAlt - Thau ) * Pidiv180 ); 838 839 I2 += ED * ED + CD2pBC2 - AE *AE; 840 841 double Codalt = ( sqrt(I2) - I0 ) / CoeffMoteur; 842 843 // AfficherLog("calcul 2=%5.0f\n", Codalt); 844 845 return Codalt; 846 } 847 848 void Alignement::OptimisationGeometrieAntenne() 849 { 850 Coord c1, c2, c3, m1, m2, m3, mm1, mm2, mm3, mm; 851 852 double i, j, k, l, m; 853 854 double memBC = BC0; 855 double memCD = CD0; 856 double memED = ED0; 857 double memAE = AE0; 858 // double memI0 = I00; 859 double memCoeffMoteur = CoeffMoteur0; 860 double memThau = Thau0; 861 862 stringstream os; 863 864 double det; 865 866 double maxdet= 1e50; 867 868 double pas = 0.1; 869 870 double interv = 0.5; 871 872 InitParametresInstrument(); 873 874 875 876 c1.x = VerifAngle(ad[0] - tsl[0] + GetTSL()); 877 c1.y = de[0]; 878 879 Azimut(c1.x, c1.y, &mm.x, &mm.y); 880 c1.x = cos(mm.x) * cos(mm.y); 881 c1.y = sin(mm.x) * cos(mm.y); 882 c1.z = sin(mm.y); 883 884 c2.x = VerifAngle(ad[1] - tsl[1] + GetTSL()); 885 c2.y = de[1]; 886 887 Azimut(c2.x, c2.y, &mm.x, &mm.y); 888 c2.x = cos(mm.x) * cos(mm.y); 889 c2.y = sin(mm.x) * cos(mm.y); 890 c2.z = sin(mm.y); 891 892 c3.x = VerifAngle(ad[2] - tsl[2] + GetTSL()); 893 c3.y = de[2]; 894 895 Azimut(c3.x, c3.y, &mm.x, &mm.y); 896 c3.x = cos(mm.x) * cos(mm.y); 897 c3.y = sin(mm.x) * cos(mm.y); 898 c3.z = sin(mm.y); 899 900 m1.x = VerifAngle(delta_ad[0] - tsl[0] + GetTSL()); 901 m1.z = 1.0; 902 903 m2.x = VerifAngle(delta_ad[1] - tsl[1] + GetTSL()); 904 m2.z = 1.0; 905 906 m3.x = VerifAngle(delta_ad[2] - tsl[2] + GetTSL()); 907 m3.z = 1.0; 908 909 910 os << "m1=" << delta_de[0] << " m11=" << Motor2Alt(Alt2Motor(delta_de[0])) << "\n"; 911 912 AfficherLog(os.str(), true); 913 os.str(""); 914 915 for (i=-interv; i< interv; i += pas) 916 { 917 CoeffMoteur = CoeffMoteur0 + i/100.0; 918 919 for (j=-interv; j<interv; j += pas) 920 { 921 ED = ED0 + j; 922 923 for (k=-interv; k<interv; k += pas) 924 { 925 CD = CD0 + k; 926 927 for (l=-interv; l < interv; l+= pas) 928 { 929 BC = BC0 + l; 930 931 Thau = (atan(CD / BC) - atan(18.5 / ED))* N180divPi; 932 933 for (m=-interv; m< interv; m += pas) 934 { 935 AE = AE0 + m; 936 937 m1.y = Motor2Alt(Alt2Motor(delta_de[0])); 938 939 Azimut(m1.x, m1.y, &mm.x, &mm.y); 940 mm1.x = cos(mm.x) * cos(mm.y); 941 mm1.y = sin(mm.x) * cos(mm.y); 942 mm1.z = sin(mm.y); 943 944 m2.y = Motor2Alt(Alt2Motor(delta_de[1])); 945 946 Azimut(m2.x, m2.y, &mm.x, &mm.y); 947 mm2.x = cos(mm.x) * cos(mm.y); 948 mm2.y = sin(mm.x) * cos(mm.y); 949 mm2.z = sin(mm.y); 950 951 m3.y = Motor2Alt(Alt2Motor(delta_de[2])); 952 953 Azimut(m3.x, m3.y, &mm.x, &mm.y); 954 mm3.x = cos(mm.x) * cos(mm.y); 955 mm3.y = sin(mm.x) * cos(mm.y); 956 mm3.z = sin(mm.y); 957 958 // Calcul de la matrice de correction en fonction de la méthode d'alignement 959 960 Matrice_ok = ElementsMatriceSimple(c1, c2, c3 ,mm1, mm2, mm3); 961 962 det = Determinant(); 963 964 if (fabs(det - 1.0) < maxdet) 965 { 966 os << "Determinant=" << det << "\n"; 967 968 os << "CD=" << CD << " ED=" << ED << " BC=" << BC << " AE=" << AE << " Thau=" << Thau << " CoeffMoteur=" << CoeffMoteur << "\n\n"; 969 970 AfficherLog(os.str(), true); 971 os.str(""); 972 maxdet = fabs(det - 1.0); 973 974 memCD = CD; 975 memED = ED; 976 memAE = AE; 977 memBC = BC; 978 memThau = Thau; 979 memCoeffMoteur = CoeffMoteur; 980 } 981 } 982 } 983 } 984 } 985 986 AfficherLog("*\n", true); 987 } 988 989 990 AfficherLog("\n\nFin du calcul.\n", true); 991 992 CD = memCD; 993 ED = memED; 994 AE = memAE; 995 BC = memBC; 996 Thau = memThau; 997 CoeffMoteur = memCoeffMoteur; 998 999 m1.y = Motor2Alt(Alt2Motor(delta_de[0])); 1000 1001 Azimut(m1.x, m1.y, &mm.x, &mm.y); 1002 mm1.x = cos(mm.x) * cos(mm.y); 1003 mm1.y = sin(mm.x) * cos(mm.y); 1004 mm1.z = sin(mm.y); 1005 1006 m2.y = Motor2Alt(Alt2Motor(delta_de[1])); 1007 1008 Azimut(m2.x, m2.y, &mm.x, &mm.y); 1009 mm2.x = cos(mm.x) * cos(mm.y); 1010 mm2.y = sin(mm.x) * cos(mm.y); 1011 mm2.z = sin(mm.y); 1012 1013 m3.y = Motor2Alt(Alt2Motor(delta_de[2])); 1014 1015 Azimut(m3.x, m3.y, &mm.x, &mm.y); 1016 mm3.x = cos(mm.x) * cos(mm.y); 1017 mm3.y = sin(mm.x) * cos(mm.y); 1018 mm3.z = sin(mm.y); 1019 1020 // Calcul de la matrice de correction en fonction de la méthode d'alignement 1021 1022 Matrice_ok = ElementsMatriceSimple(c1, c2, c3 ,mm1, mm2, mm3); 1023 1024 det = Determinant(); 1025 1026 1027 1028 os << "Determinant=" << det << "\n"; 1029 1030 1031 AfficherLog(os.str(), true); 1032 1033 1034 1035 } 1036 1037 1038 667 1039 668 1040 … … 712 1084 case TAKI : 713 1085 { 714 715 1086 double *distances; 716 1087 … … 751 1122 os << "Point " << map[i] << " d=" << distances[i] * N180divPi << "°\n"; 752 1123 } 1124 <<<<<<< .mine 1125 1126 for (int i=0; i<nbrcorrections; i++) 1127 ======= 753 1128 754 1129 for (int i=0; i<nbrcorrections; i++) 1130 >>>>>>> .r680 755 1131 { 756 1132 for (int j=i+1; j<nbrcorrections; j++) … … 824 1200 os << "\nUtilisation du triangle : " << map[best1] << " " << map[best2] << " " << map[best3] << "\n" ; 825 1201 1202 <<<<<<< .mine 1203 // if (MethodeAlignement == SIMPLE) 1204 ======= 826 1205 // if (MethodeAlignement == SIMPLE) 1206 >>>>>>> .r680 827 1207 { 828 1208 c1.x = VerifAngle(ad[map[best1]] - tsl[map[best1]] + GetTSL()); … … 838 1218 c3.z = 1.0; 839 1219 } 1220 <<<<<<< .mine 1221 /* else 1222 { 1223 c1.x = VerifAngle(ad[map[best1]] - tsl[map[best1]] + GetTSL()); 1224 c1.y = de[map[best1]]; 1225 c1.z = 1.0; 1226 ======= 840 1227 /* else 841 1228 { … … 843 1230 c1.y = de[map[best1]]; 844 1231 c1.z = 1.0; 845 1232 >>>>>>> .r680 1233 1234 <<<<<<< .mine 1235 c2.x = VerifAngle(ad[map[best2]] - tsl[map[best2]] + GetTSL()); 1236 c2.y = de[map[best2]]; 1237 c2.z = 1.0; 1238 ======= 846 1239 c2.x = VerifAngle(ad[map[best2]] - tsl[map[best2]] + GetTSL()); 847 1240 c2.y = de[map[best2]]; 848 1241 c2.z = 1.0; 849 1242 >>>>>>> .r680 1243 1244 <<<<<<< .mine 1245 c3.x = VerifAngle(ad[map[best3]] - tsl[map[best3]] + GetTSL()); 1246 c3.y = de[map[best3]]; 1247 c3.z = 1.0; 1248 }*/ 1249 1250 m1.x = VerifAngle(delta_ad[map[best1]] - tsl[map[best1]] + GetTSL()); 1251 m1.y = delta_de[map[best1]]; 1252 ======= 850 1253 c3.x = VerifAngle(ad[map[best3]] - tsl[map[best3]] + GetTSL()); 851 1254 c3.y = de[map[best3]]; … … 855 1258 m1.x = VerifAngle(delta_ad[map[best1]] - tsl[map[best1]] + GetTSL()); 856 1259 m1.y = delta_de[map[best1]]; 1260 >>>>>>> .r680 857 1261 m1.z = 1.0; 858 1262 … … 894 1298 895 1299 1300 <<<<<<< .mine 1301 for (int i=0; i<nbrcorrections; i++) SelectionnePourCalculMatrice[i] = false; 1302 ======= 896 1303 for (int i=0; i<nbrcorrections; i++) SelectionnePourCalculMatrice[i] = false; 897 1304 … … 900 1307 SelectionnePourCalculMatrice[map[best3]] = true; 901 1308 902 1309 >>>>>>> .r680 1310 1311 <<<<<<< .mine 1312 SelectionnePourCalculMatrice[map[best1]] = true; 1313 SelectionnePourCalculMatrice[map[best2]] = true; 1314 SelectionnePourCalculMatrice[map[best3]] = true; 1315 1316 1317 ======= 903 1318 //Vérifications supp 904 1319 /* … … 949 1364 950 1365 1366 >>>>>>> .r680 951 1367 //Afficher les messages de cette fonction 952 1368 … … 966 1382 967 1383 // sauvegarder la position courante 1384 <<<<<<< .mine 1385 // long pos = fichier.tellg(); 1386 ======= 968 1387 // long pos = fichier.tellg(); 1388 >>>>>>> .r680 969 1389 // se placer en fin de fichier 970 1390 fichier.seekg( 0 , std::ios_base::end ); … … 1018 1438 1019 1439 1440 <<<<<<< .mine 1020 1441 nbrcorrections = 0; 1021 1442 1022 1443 for (int j=0; j < MAXALIGNEMENTANTENNE; j++) 1444 ======= 1445 nbrcorrections = 0; 1446 1447 for (int j=0; j < MAXALIGNEMENTANTENNE; j++) 1448 >>>>>>> .r680 1023 1449 { 1024 1450 os2 << "ad " << j; … … 1059 1485 // -> on les applique... 1060 1486 1487 <<<<<<< .mine 1488 ======= 1061 1489 1490 >>>>>>> .r680 1491 1492 <<<<<<< .mine 1062 1493 1063 1494 if (delta_ad[nbrcorrections] != atof(delta_ad_data) || delta_de[nbrcorrections] != atof(delta_de_data)) 1495 ======= 1496 if (delta_ad[nbrcorrections] != atof(delta_ad_data) || delta_de[nbrcorrections] != atof(delta_de_data)) 1497 >>>>>>> .r680 1064 1498 { 1065 1499 ad[nbrcorrections] = atof(ad_data); … … 1073 1507 tsl[nbrcorrections] = atof(tsl_data); 1074 1508 1509 <<<<<<< .mine 1510 os2 << "Correction antenne ip=" << IP << " ad=" << ad[nbrcorrections] << " de=" << de[nbrcorrections] << " deltaAD=" << 1511 delta_ad[nbrcorrections] << " deltaDe=" << delta_de[nbrcorrections] << " tsl=" << tsl[nbrcorrections] << "\n"; 1512 ======= 1075 1513 os2 << "Correction antenne ip=" << IP << " ad=" << ad[nbrcorrections] << " de=" << de[nbrcorrections] << " deltaAD=" << 1076 1514 delta_ad[nbrcorrections] << " deltaDe=" << delta_de[nbrcorrections] << " tsl=" << tsl[nbrcorrections] << "\n"; 1515 >>>>>>> .r680 1077 1516 1078 1517 AfficherLog(&os2, true); 1079 1518 1080 1519 modificationAlignement = true; 1520 <<<<<<< .mine 1521 1522 nbrcorrections++; 1523 } 1524 ======= 1081 1525 1082 1526 nbrcorrections++; 1083 1527 } 1528 >>>>>>> .r680 1084 1529 } 1085 1530 … … 1315 1760 } 1316 1761 1762 <<<<<<< .mine 1763 for (int j = 0; j < nbrcorrections; j++) if (ad[j]!=0.0 && de[j]!=0.0) 1764 { 1765 os << "ad " << j; 1766 key = os.str(); 1767 os.str(""); 1768 os << ad[j]; 1769 value = os.str(); 1770 os.str(""); 1771 1772 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1773 ======= 1317 1774 for (int j = 0; j < nbrcorrections; j++) if (ad[j]!=0.0 && de[j]!=0.0) 1318 1775 { … … 1323 1780 value = os.str(); 1324 1781 os.str(""); 1325 1326 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1327 1328 os << "de " << j; 1329 key = os.str(); 1330 os.str(""); 1331 os << de[j]; 1332 value = os.str(); 1333 os.str(""); 1334 1335 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1336 1337 os << "delta_ad " << j; 1338 key = os.str(); 1339 os.str(""); 1340 os << delta_ad[j]; 1341 value = os.str(); 1342 os.str(""); 1343 1344 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1345 1346 os << "delta_de " << j; 1347 key = os.str(); 1348 os.str(""); 1349 os << delta_de[j]; 1350 value = os.str(); 1351 os.str(""); 1352 1353 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1354 1355 os << "tsl " << j; 1356 key = os.str(); 1357 os.str(""); 1358 os << tsl[j]; 1359 value = os.str(); 1360 os.str(""); 1361 1362 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1363 } 1782 >>>>>>> .r680 1783 1784 os << "de " << j; 1785 key = os.str(); 1786 os.str(""); 1787 os << de[j]; 1788 value = os.str(); 1789 os.str(""); 1790 1791 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1792 1793 os << "delta_ad " << j; 1794 key = os.str(); 1795 os.str(""); 1796 os << delta_ad[j]; 1797 value = os.str(); 1798 os.str(""); 1799 1800 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1801 1802 os << "delta_de " << j; 1803 key = os.str(); 1804 os.str(""); 1805 os << delta_de[j]; 1806 value = os.str(); 1807 os.str(""); 1808 1809 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1810 1811 os << "tsl " << j; 1812 key = os.str(); 1813 os.str(""); 1814 os << tsl[j]; 1815 value = os.str(); 1816 os.str(""); 1817 1818 writeINI((char*)section.c_str(), (char*)key.c_str(), (char*)value.c_str(), (char*)fileName.c_str()); 1819 } 1364 1820 1365 1821 -
BAORadio/libindi/libindi/communs/alignement.h
r677 r682 70 70 void Identity(); 71 71 void RotationAutourDunAxe(double t, double r, double alpha); 72 72 73 73 // Méthode de correction "simple 74 int Calculer_Matrice_Simple( Coord a1, Coord a2, Coord a3, Coord m1, Coord m2, Coord m3); 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); 75 76 void AppliquerMatriceCorrectionSimple( Coord * result, Coord vect); 76 77 … … 91 92 92 93 double Surface_Triangle(double px1, double py1, double px2, double py2, double px3, double py3); 94 <<<<<<< .mine 95 void AzHa2XY(double az, double ha, double *x, double *y); 96 bool PointSitueDansSurfaceTriangle(double px, double py, double px1, double py1, double px2, double py2, double px3, double py3); 97 ======= 93 98 void AzHa2XY(double az, double ha, double *x, double *y); 94 99 bool PointSitueDansSurfaceTriangle(double px, double py, double px1, double py1, double px2, double py2, double px3, double py3); 100 >>>>>>> .r680 95 101 96 102 double Determinant(); 97 103 98 104 inline double Determinant(); 105 void InitParametresInstrument(); 106 void OptimisationGeometrieAntenne(); 107 double Alt2Motor(double targetAlt); 108 inline double Motor2Alt(double pas); 99 109 100 110 … … 116 126 bool SelectionnePourCalculMatrice[MAXALIGNEMENTANTENNE]; 117 127 128 long int deltaAZ; // delta en azimut et en hauteur pour une correction à la raquette 129 long int deltaHA; // hors procédure d'alignement 130 131 bool SelectionnePourCalculMatrice[MAXALIGNEMENTANTENNE]; 132 118 133 double ad[MAXALIGNEMENTANTENNE]; // Coordonnées horaires d'un point de correction 119 134 … … 133 148 // dans les modes d'alignement AFFINE/TAKI 134 149 double GETPQ[4][4]; 150 151 152 double BC; //ParamÚtres de l'instrument 153 // Formule de Marc 154 double CD; 155 double ED; 156 double AE; 157 double I0; 158 double CoeffMoteur; 159 double Thau; 160 135 161 }; 136 162 -
BAORadio/libindi/libindi/communs/astro.cpp
r677 r682 567 567 ***************************************************************************************/ 568 568 569 void Astro::Azimut(double Ar, double De, double *azi, double *hau)569 void Astro::Azimut(double Ar, double De, double *azi, double *hau) 570 570 { 571 571 double ah = tsl - Ar; 572 573 double zc = sin(Latitude) * sin(De) + cos(Latitude) * cos(De) * cos(ah); 572 573 double cosLatitude = cos(Latitude); 574 double sinLatitude = sin(Latitude); 575 double cosDe_cosAh = cos(De) * cos(ah); 576 double sinDe = sin(De); 577 578 579 double zc = sinLatitude * sinDe + cosLatitude * cosDe_cosAh; 574 580 double ht = atan(zc / sqrt((-zc * zc) + 1.0)); 575 576 double a1 = cos(De) * sin(ah) / cos(ht); 577 double ac = (-cos(Latitude) * sin(De) + sin(Latitude) * cos(De) * cos(ah)) / cos(ht); 581 582 double cosHt = cos(ht); 583 584 double a1 = cos(De) * sin(ah) / cosHt; 585 double ac = (-cosLatitude * sinDe + sinLatitude * cosDe_cosAh) / cosHt; 578 586 double az = atan(a1 / sqrt((-a1*a1)+1.0)); 579 587 -
BAORadio/libindi/libindi/communs/astro.h
r677 r682 52 52 double Arrondi(double a); 53 53 string DHMS(double mema, bool HMS); 54 void Azimut(double Ar, double De, double *azi, double *hau); 54 void Azimut(double Ar, double De, double *azi, double *hau); 55 void AzHa2ADDe(double Az, double Ha, double *AD, double *Dec); 56 void RechercheAzimutFinSuivi(double AD, double Dec, long int *azmin, long int *azmax); 55 57 void AzHa2ADDe(double Az, double Ha, double *AD, double *Dec); 56 58 void RechercheAzimutFinSuivi(double AD, double Dec, long int *azmin, long int *azmax); -
BAORadio/libindi/libindi/communs/const.h
r677 r682 8 8 ////////////////////////////////////////// 9 9 10 11 // ParamÚtres de l'instrument 12 13 #define ED0 243.2 14 #define CD0 111.01 15 #define BC0 242.5 16 #define AE0 44.68 17 #define I00 81.0 18 #define CoeffMoteur0 0.078947 19 #define Thau0 20.2345 10 20 11 21 // dimensions des tableaux -
BAORadio/libindi/libindi/drivers/telescope/BAO.cpp
r677 r682 11 11 12 12 #include "BAO.h" 13 #include "../communs/alt2motor.h"14 13 15 14 … … 496 495 497 496 497 498 499 498 500 /************************************************************************************** 499 501 ** En cas de changement de texte dans la boîte de dialogue (par exemple : changement du … … 634 636 return; 635 637 } 638 } 639 else if (chaine[0] == 'M') 640 { 641 if (Sockets[targetAlignmentIP].AlignementAntenne->nbrcorrections >=3 ) 642 { 643 Sockets[targetAlignmentIP].AlignementAntenne->AlignementEnCours = 0; 644 Sockets[targetAlignmentIP].AlignementAntenne->CalculerMatriceCorrection(targetRA, targetDEC); 645 } 646 else 647 { 648 Sockets[targetAlignmentIP].AlignementAntenne->Identity(); 649 650 Sockets[targetAlignmentIP].AlignementAntenne->Matrice_ok = false; 651 } 652 653 IDSetText(&CommandTP, "Calcul des matrices de correction\n" ); 654 } 655 else if (chaine[0] == 'O') 656 { 657 IDSetText(&CommandTP, "Optimisation de la geometrie de l antenne\n" ); 658 659 if (targetAlignmentIP != -1) 660 { 661 Sockets[targetAlignmentIP].AlignementAntenne->OptimisationGeometrieAntenne(); 662 } 636 663 } 637 664 else if (chaine[0] == 'C') … … 981 1008 targetDEC * Pidiv180; 982 1009 } 983 1010 984 1011 for (int i=0; i<SocketsNumber; i++) if (Sockets[i].Connected) 985 986 987 988 989 990 991 992 1012 { 1013 if ( Sockets[i].AlignementAntenne->AlignementEnCours == 0 ) 1014 { 1015 Sockets[i].AlignementAntenne->CalculerMatriceCorrection(targetRA, targetDEC); 1016 } 1017 } 1018 1019 993 1020 994 1021 // on les affiche dans les logs … … 1818 1845 1819 1846 vect.z = 1.0; 1820 1821 1822 1847 1848 1849 1823 1850 Sockets[i].AlignementAntenne->AppliquerMatriceCorrectionAffine(&result, vect); 1824 1851 … … 1897 1924 // On applique la formule de Marc pour convertir la hauteur en nombre de pas codeur alt 1898 1925 1899 Sockets[i].TargetPosition.y = (long int) Arrondi( Alt2Motor( targetAlt ) );1926 Sockets[i].TargetPosition.y = (long int) Arrondi( Sockets[i].AlignementAntenne->Alt2Motor( targetAlt ) ); 1900 1927 1901 1928 //4000 pas pour 360° sur l'axe az -
BAORadio/libindi/libindi/drivers/telescope/BAO.h
r677 r682 136 136 int get_switch_index(ISwitchVectorProperty *sp); 137 137 void ADDEC2Motor(double newRA, double newDEC); 138 138 139 139 140 /*******************************************************/ 140 141 /* Simulation Routines … … 257 258 long int delta_ha; 258 259 259 260 260 261 }; 261 262
Note: See TracChangeset
for help on using the changeset viewer.