fork download
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4.  
  5. typedef double angle;
  6.  
  7. struct Cscan { // why class? This is clearly POD
  8. int gran; //I don't know what gran is. Perhaps this should also be floating-point.
  9. angle lockaz, lockel;
  10. };
  11.  
  12. const double pi = 3.141592653589793; // Let's use radians internally, not degrees.
  13. const angle rightangle = pi/2; // It's much handier for real calculations.
  14.  
  15. inline angle deg2rad(angle dg) { return dg * rightangle / 90.; }
  16.  
  17. angle random_in_sym_rightangle() {
  18. return rightangle * ( ((double) rand()) / ((double) RAND_MAX) - .5 );
  19. }
  20.  
  21. bool equal_in_margin(angle theta, angle phi, angle margin) {
  22. return (theta > phi-margin && theta < phi+margin);
  23. }
  24.  
  25. #define TRAVERSE_SYM_RIGHTANGLE(phi) \
  26.   for ( angle phi = -pi/4; phi < pi/4; phi += deg2rad(4) )
  27.  
  28. int lock_k // better give this a more descriptive name
  29. ( const Cscan& BS1, const Cscan& BS2, int k ) {
  30. TRAVERSE_SYM_RIGHTANGLE(az1) {
  31. TRAVERSE_SYM_RIGHTANGLE(el1) {
  32. TRAVERSE_SYM_RIGHTANGLE(az2) {
  33. TRAVERSE_SYM_RIGHTANGLE(el2) {
  34. if( equal_in_margin( az1, BS1.lockaz, deg2rad(6) )
  35. && equal_in_margin( el1, BS1.lockel, deg2rad(6) )
  36. && equal_in_margin( az2, BS1.lockaz, deg2rad(6) )
  37. && equal_in_margin( el2, BS2.lockel, deg2rad(6) ) ) {
  38. std::cout << "locked \n" << BS1.lockaz << " " << BS1.lockel << " " << BS2.lockaz << " " << BS2.lockel << '\n'
  39. << az1 << " " << el1 << " " << az2 << " " << el2 << std::endl;
  40. return 1;
  41. }
  42. }
  43. }
  44. }
  45. }
  46. return k;
  47. }
  48.  
  49. int main() {
  50. srand (time(NULL));
  51. int az1, az2, el1, el2, j, k;
  52.  
  53. Cscan BS1, BS2;
  54.  
  55. BS1.lockaz = random_in_sym_rightangle();
  56. BS1.lockel = random_in_sym_rightangle();
  57. BS2.lockaz = random_in_sym_rightangle();
  58. BS2.lockel = random_in_sym_rightangle();
  59.  
  60.  
  61.  
  62. k = rand() % 2;
  63. if(k == 0)
  64. k = -1;
  65. BS1.lockaz = k*BS1.lockaz;
  66.  
  67. k = rand() % 2;
  68. if(k == 0)
  69. k = -1;
  70. BS1.lockel = k*BS1.lockel;
  71.  
  72. k = rand() % 2;
  73. if(k == 0)
  74. k = -1;
  75. BS2.lockaz = k*BS2.lockaz;
  76.  
  77. k = rand() % 2;
  78. if(k == 0)
  79. k = -1;
  80. BS2.lockel = k*BS2.lockel;
  81.  
  82. lock_k(BS1, BS2, k);
  83.  
  84. }
Success #stdin #stdout 0.02s 2680KB
stdin
Standard input is empty
stdout
locked 
-0.260235 -0.060946 -0.209967 0.191327
-0.296706 -0.15708 -0.296706 0.122173