Advertisement
EstEsca

FINAL

Nov 29th, 2015
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 19.17 KB | None | 0 0
  1. using namespace std;
  2.  
  3. #include <iostream>
  4. #include <string>
  5. #include <cmath>
  6. #include <vector>
  7. #include <ctime>
  8. #include <cstdlib>
  9. #include <cstdio>
  10. #include <unistd.h>
  11. #include <fstream>
  12.  
  13. long double C = 300000000.0;
  14. long double R = 6400.0;
  15. long double TIMERESOLUTION = 100000.0;
  16. // in picoseconds, simulation-time for a tick
  17. long double RTIMERESOLUTION = 100000.0;
  18. // in microseconds, real-time for a tick
  19. #define ERRORRATE 1000
  20. #define ALTCOEFF 200
  21. #define ERRORTOLORATE 10000
  22. #define PRECISIONDEFINITION cout.precision(15)
  23. #define PRINTLINE cout << "---------------------------------" << endl
  24.  
  25. class sate;
  26. class center;
  27.  
  28. vector< sate > vSate;
  29. vector< center > vCenter;
  30.  
  31. long double tpr_x(long double theta, long double phi, long double rad){
  32.   return rad*sin(theta)*cos(phi);
  33. }
  34. long double tpr_y(long double theta, long double phi, long double rad){
  35.   return rad*sin(theta)*sin(phi);
  36. }
  37. long double tpr_z(long double theta, long double phi, long double rad){
  38.   return rad*cos(theta);
  39. }
  40. long double randomFloat(long double a, long double b) {
  41.     long double random = ((long double) rand()) / (long double) RAND_MAX;
  42.     long double diff = b - a;
  43.     long double r = random * diff;
  44.     return a + r;
  45. }
  46. long double dist(long double x, long double y, long double z, long double a, long double b, long double c){
  47.   return sqrt((x-a)*(x-a)+(y-b)*(y-b)+(z-c)*(z-c));
  48. }
  49. long double cDist(long double x, long double y, long double z, long double a, long double b, long double c, long long error){
  50.   return dist(x,y,z,a,b,c)-(((long double)(C * error)+0.0)/1000000000000);
  51. }
  52. int chkComm(long double x,long double y,long double z,long double a,long double b, long double c){
  53.   long double check=(a*x-x*x+b*y-y*y+c*z-z*z)
  54.                     /(sqrt((a-x)*(a-x)+(b-y)*(b-y)+(c-z)*(c-z))*sqrt(x*x+y*y+z*z));
  55. //  cout << "DEBUG: COS(THETA) = "<< check << endl;
  56. //  cout << "DEBUG: A = "<< (a*x-x*x+b*y-y*y+c*z-z*z) << endl;
  57. //  cout << "DEBUG: /B = "<< (sqrt((a-x)*(a-x)+(b-y)*(b-y)+(c-z)*(c-z))*sqrt(x*x+y*y+z*z)) << endl;
  58. //  cout << "DEBUG: /p = "<< sqrt((a-x)*(a-x)+(b-y)*(b-y)+(c-z)*(c-z)) << endl;
  59. //  cout << "DEBUG: /q = "<< sqrt(x*x+y*y+z*z) << endl;
  60. //  cout << "DEBUG: A/B = "<< (a*x-x*x+b*y-y*y+c*z-z*z)/(sqrt((a-x)*(a-x)+(b-y)*(b-y)+(c-z)*(c-z))*sqrt(x*x+y*y+z*z)) << endl;
  61.   if(0.0<=check){
  62.     return 1;
  63.   }
  64.   else{
  65.     return 0;
  66.   }
  67. }
  68. class xyz{
  69. public:
  70.   long double x_;
  71.   long double y_;
  72.   long double z_;
  73.  
  74.   xyz(){}
  75. };
  76.  
  77. class sate{
  78. private:
  79.   long double x_;
  80.   long double y_;
  81.   long double z_;
  82.  
  83.   long double theta_;
  84.   long double phi_;
  85.   long double rad_;
  86.  
  87.   long long error_;
  88.  
  89. public:
  90.   sate(){}
  91.   void setSateposition(){
  92.     theta_ = randomFloat(0.0, M_PI);
  93.     phi_ =  randomFloat(0.0, 2*M_PI);
  94.     rad_ = R+randomFloat(100,100+ALTCOEFF);
  95.  
  96.     x_=tpr_x(theta_, phi_, rad_);
  97.     y_=tpr_y(theta_, phi_, rad_);
  98.     z_=tpr_z(theta_, phi_, rad_);
  99. //    cout << "TPR: "<<theta_<<" "<<phi_<<" "<<rad_<<" XYZ: "<<x_<<" "<<y_<<" "<<z_<<endl;
  100.   }
  101.   void setSateposition(int i, long double p, long double q);
  102.   void setSateposition(long double a, long double b, long double c){
  103.       theta_ = a;
  104.       phi_ = b;
  105.       rad_ = c;
  106.  
  107.       x_=tpr_x(theta_, phi_, rad_);
  108.       y_=tpr_y(theta_, phi_, rad_);
  109.       z_=tpr_z(theta_, phi_, rad_);
  110. //      cout << "TPR: "<<theta_<<" "<<phi_<<" "<<rad_<<" XYZ: "<<x_<<" "<<y_<<" "<<z_<<endl;
  111.     }
  112.   void setError(){
  113.     error_=error_+TIMERESOLUTION*ERRORRATE*(rand()%100);
  114.   }
  115.   void setError(long long error){
  116.     error_=error;
  117.   }
  118.   long double getx(void){
  119.     return x_;
  120.   }
  121.   long double gety(void){
  122.     return y_;
  123.   }
  124.   long double getz(void){
  125.     return z_;
  126.   }
  127.   long double gett(void){
  128.     return theta_;
  129.   }
  130.   long double getp(void){
  131.     return phi_;
  132.   }
  133.   long double getr(void){
  134.     return rad_;
  135.   }
  136.   long long getError(void){
  137.     return error_;
  138.   }
  139.  
  140. };
  141. class center{
  142. private:
  143.   long double x_;
  144.   long double y_;
  145.   long double z_;
  146.  
  147.   long double theta_;
  148.   long double phi_;
  149.   long double rad_;
  150.  
  151.   long long tError_;
  152.  
  153.   vector <sate*> sate_;
  154.  
  155. public:
  156.   center(long long tError){
  157.     tError_ = tError;
  158.   }
  159.   void setCenterposition(long double a, long double b, long double c){
  160.       theta_ = a;
  161.       phi_ = b;
  162.       rad_ = c;
  163.  
  164.       x_=tpr_x(theta_, phi_, rad_);
  165.       y_=tpr_y(theta_, phi_, rad_);
  166.       z_=tpr_z(theta_, phi_, rad_);
  167.  //     cout << "TPR: "<<theta_<<" "<<phi_<<" "<<rad_<<" XYZ: "<<x_<<" "<<y_<<" "<<z_<<endl;
  168.     }
  169.   void setCenterposition(){
  170.  
  171.     theta_ = randomFloat(0.0, M_PI);
  172.     phi_ =  randomFloat(0.0, 2*M_PI);
  173.     rad_ = R;
  174.  
  175.     x_=tpr_x(theta_, phi_, rad_);
  176.     y_=tpr_y(theta_, phi_, rad_);
  177.     z_=tpr_z(theta_, phi_, rad_);
  178.  
  179. //    cout << "TPR: "<<theta_<<" "<<phi_<<" "<<rad_<<" XYZ: "<<x_<<" "<<y_<<" "<<z_<<endl;
  180.   }
  181.  
  182.   void init(){
  183.     cout << "DEBUG: INITIALIZING CENTER WITH (NEW) SATES SET" << endl;
  184.     sate_.clear();
  185.     for(int i=0; i < vSate.size(); i++){
  186.       //if coummunicatable,
  187.       sate* Sate = &vSate[i];
  188.       if(chkComm(x_,y_,z_,Sate->getx(),Sate->gety(),Sate->getz())){
  189.         sate_.push_back(Sate);
  190.         cout << "DEBUG: A COMMUNCATABLE SATE FOUND WITH XYZ: "<<Sate->getx()<<" "<<Sate->gety()<<" "<<Sate->getz()<<endl;
  191.       }
  192.       else{
  193.         cout << "DEBUG: AN UNCOMMUNICATABLE SATE FOUND WITH XYZ: "<<Sate->getx()<<" "<<Sate->gety()<<" "<<Sate->getz()<<endl;
  194.       }
  195.     }
  196.   }
  197.   void syncTime(){
  198.     for(int i=0; i < sate_.size(); i++){
  199.       sate* Sate = sate_[i];
  200.       if(abs(Sate->getError())>tError_){
  201.         Sate->setError(.0);
  202.       }
  203.     }
  204.   }
  205.   long double getx(void){
  206.     return x_;
  207.   }
  208.   long double gety(void){
  209.     return y_;
  210.   }
  211.   long double getz(void){
  212.     return z_;
  213.   }
  214.   long double gett(void){
  215.     return theta_;
  216.   }
  217.   long double getp(void){
  218.     return phi_;
  219.   }
  220.   long double getr(void){
  221.     return rad_;
  222.   }
  223. };
  224.  
  225. class user{
  226. private:
  227.   long double x_;
  228.   long double y_;
  229.   long double z_;
  230.  
  231.   long double theta_;
  232.   long double phi_;
  233.   long double rad_;
  234.  
  235.   vector<sate*> commSate_;
  236.  
  237. public:
  238.   user(){}
  239.   void init(){
  240.     commSate_.clear();
  241.     for(int i=0;i<vSate.size();i++){
  242.       sate* Sate = &vSate[i];
  243.       if(chkComm(x_,y_,z_,Sate->getx(),Sate->gety(),Sate->getz())){
  244.         commSate_.push_back(Sate);
  245.  //       cout << "DEBUG: COMMUNICATABLE SATE FOUUND WITH TPR: "<<Sate->getx()<<" "<<Sate->gety()<<" "<<Sate->getz()<<endl;
  246.       }
  247.     }
  248.   }
  249.   void setUserposition(long double a, long double b, long double c){
  250.     theta_ = a;
  251.     phi_ = b;
  252.     rad_ = c;
  253.  
  254.     x_=tpr_x(theta_, phi_, rad_);
  255.     y_=tpr_y(theta_, phi_, rad_);
  256.     z_=tpr_z(theta_, phi_, rad_);
  257.  //   cout << "TPR: "<<theta_<<" "<<phi_<<" "<<rad_<<" XYZ: "<<x_<<" "<<y_<<" "<<z_<<endl;
  258.   }
  259.   void setUserposition(){
  260.     theta_ = randomFloat(0.0, M_PI);
  261.     phi_ =  randomFloat(0.0, 2*M_PI);
  262.     rad_ = R;
  263.  
  264.     x_=tpr_x(theta_, phi_, rad_);
  265.     y_=tpr_y(theta_, phi_, rad_);
  266.     z_=tpr_z(theta_, phi_, rad_);
  267.  //   cout << "TPR: "<<theta_<<" "<<phi_<<" "<<rad_<<" XYZ: "<<x_<<" "<<y_<<" "<<z_<<endl;
  268.   }
  269.  
  270.   xyz* printCoordinate(void){
  271.     if(commSate_.size() < 3){
  272.       cout << "FATAL ERROR: NOT ENOUGH SATES" << endl;
  273.       cout << "DEBUG: YOU HAVE "<<commSate_.size()<<" COMMUNICATABLE SATES NOW" << endl;
  274.     }
  275.     else{
  276.       int i, j, k, n;
  277.       long double ax, ay, az, at, ap, ar;
  278.       ax = ay = az = at = ap = ar = 0.0;
  279.       for(i=0, n=0;i<commSate_.size()-2;i++){
  280.         for(j=i+1;j<commSate_.size()-1;j++){
  281.           for(k=j+1;k<commSate_.size();k++){
  282.             // getCoordinate();
  283.             // vector[i]와 j, k를 이용하여 getCoordinate한 것들을, 평균
  284.               sate* S1 = commSate_[i];
  285.               sate* S2 = commSate_[j];
  286.               sate* S3 = commSate_[k];
  287. //              cout << "NOW CALCULATING WITH "<<i<<", "<<j<<", "<<k<<" SATES" << endl;
  288.               xyz* XYZ = getCoordinate(S1->getx(),S1->gety(),S1->getz(),
  289.                                        S2->getx(),S2->gety(),S2->getz(),
  290.                                        S3->getx(),S3->gety(),S3->getz(),
  291.                                        cDist(x_,y_,z_,S1->getx(),S1->gety(),S1->getz(),S1->getError()),
  292.                                        cDist(x_,y_,z_,S2->getx(),S2->gety(),S2->getz(),S2->getError()),
  293.                                        cDist(x_,y_,z_,S3->getx(),S3->gety(),S3->getz(),S3->getError()));
  294.             //A의 좌표, B의 좌표, C의 좌표, A까지 추정 거리, B까지 추정 거리, C까지 추정 거리
  295. //            cout << XYZ->x_<<" "<< XYZ->y_<<" "<< XYZ->z_<<" "<< endl;
  296.             ax = ax + XYZ->x_;
  297.             ay = ay + XYZ->y_;
  298.             az = az + XYZ->z_;
  299.  
  300.             delete XYZ;
  301.             n++;
  302.           }
  303.         }
  304.       }
  305.  
  306.       ax = ax / (n+.0);
  307.       ay = ay / (n+.0);
  308.       az = az / (n+.0);
  309. /*
  310.       PRINTLINE;
  311.       cout << "AVERAGE X ASSUMPTION: " << ax << endl;
  312.       cout << "AVERAGE Y ASSUMPTION: " << ay << endl;
  313.       cout << "AVERAGE Z ASSUMPTION: " << az << endl;
  314.       PRINTLINE;
  315. */
  316.       at = acos(az/sqrt(ax*ax+ay*ay+az*az));
  317.       ap = atan2(ay,ax);
  318.       ar = sqrt(ax*ax+ay*ay+az*az);
  319. /*
  320.       cout << "AVERAGE THETA ASSUMPTION: " << at << endl;
  321.       cout << "AVERAGE PHI ASSUMPTION: " << ap << endl;
  322.       cout << "AVERAGE RHO ASSUMPTION: " << ar << endl;
  323. */
  324.  
  325.       xyz* XYZ = new xyz();
  326.       XYZ->x_ = ax;
  327.       XYZ->y_ = ay;
  328.       XYZ->z_ = az;
  329.  
  330.       return XYZ;
  331.     }
  332.   }
  333.  
  334.   xyz* getCoordinate(long double a, long double b, long double c, long double p, long double q, long double r, long double i, long double j, long double k, long double d, long double s, long double l){
  335.  
  336.     long double x_, y_, z_;
  337.     x_ = -(((4*c*q - 4*b*r)*(2*k*(a*a + b*b + c*c - d*d + R*R) -
  338.                2*c*(i*i + j*j + k*k - l*l + R*R)) - (4*c*j -
  339.                4*b*k)*(2*r*(a*a + b*b + c*c - d*d + R*R) -
  340.                2*c*(p*p + q*q + r*r + R*R - s*s)))/((-16*(c*c))*j*p +
  341.             16*b*c*k*p + 16*(c*c)*i*q - 16*a*c*k*q - 16*b*c*i*r +
  342.             16*a*c*j*r));
  343.  
  344.     y_ = -((c*i*i*p + c*j*j*p - a*a*k*p - b*b*k*p - c*c*k*p + d*d*k*p +
  345.           c*k*k*p - c*l*l*p - c*i*p*p + a*k*p*p - c*i*q*q + a*k*q*q +
  346.           a*a*i*r + b*b*i*r + c*c*i*r - d*d*i*r - a*i*i*r - a*j*j*r -
  347.           a*k*k*r + a*l*l*r - c*i*r*r + a*k*r*r - c*i*R*R + a*k*R*R +
  348.           c*p*R*R - k*p*R*R - a*r*R*R + i*r*R*R + c*i*s*s -
  349.           a*k*s*s)/(2*(-c*j*p + b*k*p + c*i*q - a*k*q - b*i*r +
  350.             a*j*r)));
  351.  
  352.     z_ = (-b*i*i*p + a*a*j*p + b*b*j*p + c*c*j*p -d*d*j*p - b*j*j*p -
  353.         b *k*k* p + b*l*l*p + b*i*p*p - a*j*p*p - a*a*i*q - b*b*i*q -
  354.         c*c* i* q + d*d*i*q + a*i*i*q + a*j*j*q + a*k*k*q - a*l*l*q +
  355.         b*i*q*q - a*j*q*q + b*i*r*r - a*j*r*r + b*i*R*R - a*j*R*R -
  356.         b*p*R*R + j*p*R*R + a*q*R*R - i*q*R*R - b*i*s*s +
  357.         a*j*s*s)/(2*(c*j*p - b*k*p - c*i*q + a*k*q + b*i*r - a*j*r));
  358.     xyz* XYZ = new xyz();
  359.     XYZ->x_=x_;
  360.     XYZ->y_=y_;
  361.     XYZ->z_=z_;
  362.  
  363.     return XYZ;
  364.   }
  365.   long double getx(void){
  366.     return x_;
  367.   }
  368.   long double gety(void){
  369.     return y_;
  370.   }
  371.   long double getz(void){
  372.     return z_;
  373.   }
  374.   long double gett(void){
  375.     return theta_;
  376.   }
  377.   long double getp(void){
  378.     return phi_;
  379.   }
  380.   long double getr(void){
  381.     return rad_;
  382.   }
  383. };
  384.  
  385. void sate::setSateposition(int i, long double p, long double q){
  386.   if(i > (vCenter.size()-1)){
  387.     cout << "FATAL ERROR: THERE ARE UP TO #" << vCenter.size()-1 << " CENTERS" << endl;
  388.   }
  389.   else{
  390.     long double st, sp, sr, sx, sy, sz;
  391.     center* Center = &vCenter[i];
  392.  
  393.     while(1){
  394.       sr = randomFloat(p, q);
  395.       st = randomFloat(0, 2*M_PI);
  396.       sp = randomFloat(0, M_PI);
  397.  
  398.       sx = tpr_x(st, sp, sr);
  399.       sy = tpr_y(st, sp, sr);
  400.       sz = tpr_z(st, sp, sr);
  401.  
  402. //    cout << "DEBUG: A TEMP SATE GENERATED WITH TPR: "<<st<<" "<<sp<<" "<<sr<<endl;
  403.       if(chkComm(Center->getx(),Center->gety(),Center->getz(),sx,sy,sz)){
  404.         rad_=sr;
  405.         theta_=st;
  406.         phi_=sp;
  407.  
  408.         x_=sx;
  409.         y_=sy;
  410.         z_=sz;
  411.  
  412. //        cout << "DEBUG: A SATE GENERATED  WITH ";
  413.         break;
  414.       }
  415.       else{
  416.  
  417.       }
  418.     }
  419. //    cout << "TPR: "<<theta_<<" "<<phi_<<" "<<rad_<<endl;
  420. //    cout << "XYZ: "<<x_<<" "<<y_<<" "<<z_<<endl;
  421.   }
  422. }
  423.  
  424.  
  425. int main(){
  426.  
  427.   PRECISIONDEFINITION;
  428.   srand(time(NULL));
  429.   int i;
  430.   long double a, b, c;
  431. /*
  432.   system("clear");
  433.   cout << "THIS IS A TEST PROGRAMME" << endl;
  434.   cout << "SETTINGS: "<< endl << "TIME IN SIMULATION FOR A TICK(n): " << TIMERESOLUTION << endl;
  435.   cout << "TIME IN REAL WORLD FOR A TICK(u): " << RTIMERESOLUTION << endl;
  436. */
  437.  
  438.  
  439.   //USER POSITION ASSUMING
  440.   center* Center;
  441.   sate* Sate;
  442.  
  443.   cout << "HOW MANY CENTERS ARE THERE IN THIS SYSTEM: " << endl;
  444.   cin >> i;
  445.   if(i<1){
  446.     system("clear");
  447.     return 0;
  448.   }
  449.  
  450.   for(int k=0;k<i;k++){
  451.     PRINTLINE;
  452.     vCenter.push_back(center(ERRORTOLORATE));
  453.     Center = &vCenter[k];
  454.     cout << "INPUT CENTER "<<k<<"'S POSITION IN TPR <THETA, PHI>: "<<endl;
  455. //    cin >> a >> b >> c;
  456.     cin >> a >> b;
  457.     Center->setCenterposition(a,b,R);
  458.     cout <<"CENTER "<<k<<" GENERATED" << endl;
  459.   }
  460.   for(int k=0;;k++){
  461.     PRINTLINE;
  462.  
  463.     cout << "INPUT SATE "<<k<<"'S TARGET CENTER, MIN RAD, MAX RAD: "<<endl;
  464.     cout << "TO SKIP, INPUT ANY NEGATIVE INTEGERS" << endl;
  465.     vSate.push_back(sate());
  466.     Sate = &vSate[k];
  467.  
  468.     int n;
  469.     cin >> n >> a >> b;
  470.     if(n < 0 || b < 0 || c < 0){
  471.       break;
  472.     }
  473.     Sate->setSateposition(n, a, b);
  474.     Sate->setError(0.0);
  475.  
  476.     for(int j=0;j<vCenter.size();j++){
  477.       cout << "CENTER #"<<j<<" SELECTED"<<endl;
  478.       Center = &vCenter[j];
  479.       Center->init();
  480.     }
  481.   }
  482.  
  483.   user* User = new user();
  484.   PRINTLINE;
  485.   cout << "INPUT USER'S POS IN TPR <THETA, PHI>: ";
  486. //  cin >> a >> b >> c;
  487.   cin >> a >> b;
  488.   User->setUserposition(a, b ,R);
  489.   User->init();
  490.   User->printCoordinate();
  491.  
  492.  
  493. /*
  494. //Test2
  495.  
  496. sate* S1;
  497. sate* S2;
  498. sate* S3;
  499.  
  500. long double at, ap, ar, ax, ay, az, eDist;
  501. int count;
  502.  
  503. for(unsigned long i=0;i<1000000000;i=i+10){
  504.     count = 0;
  505.     for(int j=0;j<10000;j++){
  506.  //       PRINTLINE;
  507.  //       cout << "DEBUG: ERROR IS : " << i << ", " << j << " TRY" << endl;
  508.  //       PRINTLINE;
  509.         vCenter.push_back(center(0.0));
  510.         center* Center = &vCenter[0];
  511.         Center->setCenterposition();
  512.  
  513.         user* User = new user();
  514.         User->setUserposition(Center->gett(),Center->getp(),Center->getr());
  515. //        cout << "DEBUG: USER WITH TPR: " << User->gett() << " " << User->getp() << " " << User->getr() << " GENERATED" << endl;
  516.  
  517.         sate* Sate;
  518.         for(int k=0;k<3;k++){
  519.             vSate.push_back(sate());
  520.             Sate = &vSate[k];
  521.             Sate->setError(i);
  522.             Sate->setSateposition(0,R+ALTCOEFF,R+ALTCOEFF*(rand()%2));
  523. //            cout << "DEBUG: SATE WITH TPR: " << Sate->gett() << " " << Sate->getp() << " " << Sate->getr() << " GENERATED" << endl;
  524.         }
  525.  
  526.         S1=&vSate[0];
  527.         S2=&vSate[1];
  528.         S3=&vSate[3];
  529.  
  530.  //       cout << "USER XYZ: " << User->getx() << " " << User->gety() << " " << User->getz() << endl;
  531.  
  532.         xyz* XYZ;
  533.         User->init();
  534.         XYZ = User->printCoordinate();
  535.  
  536.         ax = XYZ->x_;
  537.         ay = XYZ->y_;
  538.         az = XYZ->z_;
  539.  
  540.         at = acos(az/sqrt(ax*ax+ay*ay+az*az));
  541.         ap = atan2(ay,ax);
  542.         ar = sqrt(ax*ax+ay*ay+az*az);
  543.  
  544.         ar = 6400.0;
  545.         ax = tpr_x(at,ap,ar);
  546.         ay = tpr_y(at,ap,ar);
  547.  
  548.  
  549. //        cout << "DEBUG: XYZ ASSUMTION: " << ax << " " << ay << " " << az << endl;
  550. //        cout << "DEBUG: TPR ASSUMTION: " << at << " " << ap << " " << ar << endl;
  551.  
  552.         eDist=dist(ax,ay,az,User->getx(),User->gety(),User->getz());
  553. //        cout << "error in meter: "<< eDist*1000 << endl;
  554. //        cout << "error count: " << count << endl;
  555.  
  556.         if(eDist>5.0){
  557.             count++;
  558.         }
  559.  
  560.         delete User;
  561.         delete XYZ;
  562.         vSate.clear();
  563.         vCenter.clear();
  564.     }
  565.         cout << i <<" ps : " << count << endl;
  566.  
  567. }
  568. */
  569.  
  570. /*
  571. //Test3
  572. ofstream fout;
  573. fout.open("data.txt");
  574. sate* S1;
  575. sate* S2;
  576. sate* S3;
  577. sate* S4;
  578.  
  579. long double at, ap, ar, ax, ay, az, eDist, tE, fE;
  580. int tcount, fcount;
  581.  
  582. for(unsigned long i=0;i<1000000000;i=i+10){
  583.     tE = fE = 0.0;
  584.     tcount = fcount = 0;
  585.     for(int j=0;j<10000;j++){
  586.  //       PRINTLINE;
  587.  //         cout << "DEBUG: ERROR IS : " << i << ", " << j << " TRY" << endl;
  588.  //       PRINTLINE;
  589.         vCenter.push_back(center(0.0));
  590.         center* Center = &vCenter[0];
  591.         Center->setCenterposition();
  592.  
  593.         user* User = new user();
  594.         User->setUserposition(Center->gett(),Center->getp(),Center->getr());
  595. //        cout << "DEBUG: USER WITH TPR: " << User->gett() << " " << User->getp() << " " << User->getr() << " GENERATED" << endl;
  596.  
  597.         sate* Sate;
  598.         for(int k=0;k<3;k++){
  599.             vSate.push_back(sate());
  600.             Sate = &vSate[k];
  601.             Sate->setError(i);
  602.             Sate->setSateposition(0,R+ALTCOEFF,R+ALTCOEFF*(rand()%2));
  603. //            cout << "DEBUG: SATE WITH TPR: " << Sate->gett() << " " << Sate->getp() << " " << Sate->getr() << " GENERATED" << endl;
  604.         }
  605.  
  606.         S1=&vSate[0];
  607.         S2=&vSate[1];
  608.         S3=&vSate[2];
  609.  
  610.  //       cout << "USER XYZ: " << User->getx() << " " << User->gety() << " " << User->getz() << endl;
  611.  
  612.         xyz* XYZ;
  613.         User->init();
  614.         XYZ = User->printCoordinate();
  615.  
  616.         ax = XYZ->x_;
  617.         ay = XYZ->y_;
  618.         az = XYZ->z_;
  619.  
  620.         at = acos(az/sqrt(ax*ax+ay*ay+az*az));
  621.         ap = atan2(ay,ax);
  622.         ar = sqrt(ax*ax+ay*ay+az*az);
  623.  
  624.         ar = 6400.0;
  625.         ax = tpr_x(at,ap,ar);
  626.         ay = tpr_y(at,ap,ar);
  627.  
  628.  
  629. //        cout << "DEBUG: XYZ ASSUMTION: " << ax << " " << ay << " " << az << endl;
  630. //        cout << "DEBUG: TPR ASSUMTION: " << at << " " << ap << " " << ar << endl;
  631.  
  632.         eDist=dist(ax,ay,az,User->getx(),User->gety(),User->getz());
  633.         if(eDist>5.0){
  634.             tcount++;
  635.         }
  636. //        cout << "error in meter: "<< eDist*1000 << endl;
  637. //        cout << "error count: " << count << endl;
  638.  
  639.         tE=tE+eDist;
  640.  
  641.         vSate.push_back(sate());
  642.         Sate = &vSate[3];
  643.         Sate->setError(i);
  644.         Sate->setSateposition(0,R+ALTCOEFF,R+ALTCOEFF*(rand()%2));
  645.  
  646.         S4=&vSate[3];
  647.  
  648.         User->init();
  649.         XYZ = User->printCoordinate();
  650.  
  651.         ax = XYZ->x_;
  652.         ay = XYZ->y_;
  653.         az = XYZ->z_;
  654.  
  655.         at = acos(az/sqrt(ax*ax+ay*ay+az*az));
  656.         ap = atan2(ay,ax);
  657.         ar = sqrt(ax*ax+ay*ay+az*az);
  658.  
  659.         ar = 6400.0;
  660.         ax = tpr_x(at,ap,ar);
  661.         ay = tpr_y(at,ap,ar);
  662.  
  663.         eDist=dist(ax,ay,az,User->getx(),User->gety(),User->getz());
  664.         if(eDist>5.0){
  665.             fcount++;
  666.         }
  667.         fE=fE+eDist;
  668.  
  669.         delete User;
  670.         delete XYZ;
  671.         vSate.clear();
  672.         vCenter.clear();
  673.     }
  674.         cout << i <<" ps : " << tE/10000 << " " << fE/10000 << endl;
  675.         cout << i <<" ps : " << tcount << " " << fcount << endl;
  676.         fout << i << " " << tcount << " " << fcount << endl;
  677.  
  678. }
  679. fout.close();
  680. */
  681.  
  682. /*
  683.   //Time Simualtion
  684.   long double elapsed = .0;
  685.   while(1){
  686.     cout << "TIME OF SIMULATION ELAPSED IN SECONDS: "<<(long double)elapsed<<endl;
  687.     elapsed=elapsed+(long double)(0.0+TIMERESOLUTION/1000000000);
  688.     usleep(RTIMERESOLUTION);
  689.   }
  690.  
  691.  */
  692. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement