fork download
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5. double checkAngles(double alfa, double beta, double gamma, bool iLogData = false) {
  6.  
  7. double x1 = 0.635579055, y1 = 0.772035793, z1 = 0;
  8. double x2 = -0.302448857, y2 = 0.860668117, z2 = 0.399973843;
  9.  
  10. double ca = cos(alfa), sa = sin(alfa);
  11. double cb = cos(beta), sb = sin(beta);
  12. double cg = cos(gamma), sg = sin(gamma);
  13.  
  14. double x = ( cg * cb * ca - sg * sa) * x1 + ( cg * cb * sa + sg * ca) * y1 + (-cg * sb) * z1;
  15. double y = (-sg * cb * ca - cg * sa) * x1 + (-sg * cb * sa + cg * ca) * y1 + ( sg * sb) * z1;
  16. double z = ( sb * ca) * x1 + ( sb * sa) * y1 + ( cb) * z1;
  17.  
  18. if (iLogData) {
  19. std::cout << "CheckAngles:" << std::endl;
  20. std::cout << "alfa = " << alfa << ", beta = " << beta << ", gamma = " << gamma << std::endl;
  21. std::cout << "goalV2 = " << x2 << ", " << y2 << ", " << z2 << std::endl;
  22. std::cout << "realV2 = " << x << ", " << y << ", " << z << std::endl << std::endl;;
  23. }
  24.  
  25. return fabs(x - x2) + fabs(y - y2) + fabs(z - z2);
  26. }
  27.  
  28. int main() {
  29. const double Pi = 3.1415926;
  30. const double equalTol = 0.001;
  31. double minDist = 0.3;
  32. double minAlfa = 0, minBeta = 0, minGamma = 0;
  33. double angleStep = 0.1;
  34. for (double alfa = -Pi; alfa <= Pi; alfa += angleStep) {
  35. std::cout << "alfa = " << alfa << std::endl;
  36. for (double beta = -Pi; beta <= Pi; beta += angleStep) {
  37. for (double gamma = -Pi; gamma <= Pi; gamma += angleStep) {
  38. double dist = checkAngles(alfa, beta, gamma);
  39. if (dist < minDist) {
  40. std::cout << "new minDist = " << dist << std::endl;
  41. checkAngles(alfa, beta, gamma, true/*log*/);
  42. minDist = dist;
  43. minAlfa = alfa;
  44. minBeta = beta;
  45. minGamma = gamma;
  46. } else if (dist < minDist + equalTol) {
  47. std::cout << " equal angles dist" << std::endl;
  48. checkAngles(alfa, beta, gamma, true/*log*/);
  49. }
  50. }
  51. }
  52. }
  53.  
  54. std::cout << std::endl << std::endl;
  55. std::cout << "minDist = " << minDist << std::endl;
  56. std::cout << "alfa = " << minAlfa << ", beta = " << minBeta << ", gamma = " << minGamma << std::endl;
  57. checkAngles(minAlfa, minBeta, minGamma, true/*log*/);
  58.  
  59. return 0;
  60. }
Success #stdin #stdout 0.03s 4464KB
stdin
Standard input is empty
stdout
alfa = -3.14159
new minDist = 0.282658
CheckAngles:
alfa = -3.14159, beta = -2.74159, gamma = -2.94159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.420358, 0.872949, 0.247506

new minDist = 0.231013
CheckAngles:
alfa = -3.14159, beta = -2.74159, gamma = -2.84159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.331109, 0.910554, 0.247506

new minDist = 0.192878
CheckAngles:
alfa = -3.14159, beta = -2.64159, gamma = -2.94159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.393275, 0.867459, 0.304713

new minDist = 0.13924
CheckAngles:
alfa = -3.14159, beta = -2.64159, gamma = -2.84159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.304709, 0.902387, 0.304713

new minDist = 0.0995733
CheckAngles:
alfa = -3.14159, beta = -2.54159, gamma = -2.94159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.36073, 0.860862, 0.358875

new minDist = 0.0375214
CheckAngles:
alfa = -3.14159, beta = -2.44159, gamma = -2.94159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.323048, 0.853223, 0.409451

alfa = -3.04159
alfa = -2.94159
new minDist = 0.0364924
CheckAngles:
alfa = -2.94159, beta = -0.541593, gamma = 1.95841
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.332183, 0.854115, 0.400178

alfa = -2.84159
new minDist = 0.0152916
CheckAngles:
alfa = -2.84159, beta = -2.64159, gamma = -2.54159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.29464, 0.86764, 0.400485

alfa = -2.74159
alfa = -2.64159
 equal angles dist
CheckAngles:
alfa = -2.64159, beta = -0.441593, gamma = 1.65841
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.29798, 0.868298, 0.396569

alfa = -2.54159
alfa = -2.44159
alfa = -2.34159
alfa = -2.24159
alfa = -2.14159
alfa = -2.04159
alfa = -1.94159
alfa = -1.84159
alfa = -1.74159
alfa = -1.64159
alfa = -1.54159
alfa = -1.44159
alfa = -1.34159
alfa = -1.24159
alfa = -1.14159
new minDist = 0.0106882
CheckAngles:
alfa = -1.14159, beta = -1.14159, gamma = -0.141593
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.307145, 0.864518, 0.397832

alfa = -1.04159
alfa = -0.941593
alfa = -0.841593
alfa = -0.741593
alfa = -0.641593
alfa = -0.541593
alfa = -0.441593
alfa = -0.341593
alfa = -0.241593
alfa = -0.141593
alfa = -0.0415926
alfa = 0.0584074
alfa = 0.158407
alfa = 0.258407
alfa = 0.358407
new minDist = 0.00825463
CheckAngles:
alfa = 0.358407, beta = 2.65841, gamma = 0.658407
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.300622, 0.86472, 0.40235

alfa = 0.458407
new minDist = 0.00652978
CheckAngles:
alfa = 0.458407, beta = 0.458407, gamma = -1.44159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.302318, 0.863638, 0.403403

alfa = 0.558407
alfa = 0.658407
alfa = 0.758407
alfa = 0.858407
alfa = 0.958407
alfa = 1.05841
alfa = 1.15841
alfa = 1.25841
alfa = 1.35841
alfa = 1.45841
alfa = 1.55841
alfa = 1.65841
alfa = 1.75841
alfa = 1.85841
alfa = 1.95841
alfa = 2.05841
alfa = 2.15841
alfa = 2.25841
alfa = 2.35841
alfa = 2.45841
alfa = 2.55841
alfa = 2.65841
alfa = 2.75841
alfa = 2.85841
alfa = 2.95841
alfa = 3.05841


minDist = 0.00652978
alfa = 0.458407, beta = 0.458407, gamma = -1.44159
CheckAngles:
alfa = 0.458407, beta = 0.458407, gamma = -1.44159
goalV2 = -0.302449, 0.860668, 0.399974
realV2 = -0.302318, 0.863638, 0.403403