Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. pair<Matrix, Matrix> IB(Matrix R, Matrix D, Matrix Rc, Matrix Dc, Vector X,
  2.         Vector Y, Vector Xd, Vector Yd) {
  3.  
  4.     int n = X.size();
  5.    
  6.     //Convert Initial Data to Decimal Values
  7.     Vector R_decimal = S2D(R,'r','r');
  8.     Vector D_decimal = S2D(D,'d','r');
  9.    
  10.     Vector Rc_decimal = S2D(Rc,'r','r');
  11.     Vector Dc_decimal = S2D(Dc,'d','r');
  12.    
  13.     //Perform Trig Calculations
  14.     Vector s_RRc, c_RRc, t_D;
  15.  
  16.     double s_Dc = sin(Dc_decimal[0]);
  17.     double c_Dc = cos(Dc_decimal[0]);
  18.     double t_Dc = tan(Dc_decimal[0]);
  19.  
  20.     for (int i=0; i < n; i++ ){
  21.         s_RRc[i] = sin(R_decimal[i]-Rc_decimal[0]);
  22.         c_RRc[i] = cos(R_decimal[i]-Rc_decimal[0]);
  23.         t_D[i] = tan(D_decimal[i]);
  24.     }
  25.  
  26.  
  27.     //Calculate Standard Coordinates
  28.     Vector Xi;
  29.     Vector Eta;
  30.     for (int i=0; i<n; i++){
  31.         Xi.push_back(-1 * (s_RRc[i] / (s_Dc*t_D[i] + c_Dc*c_RRc[i])));
  32.         Eta.push_back(-1 * ((t_D[i] - t_Dc*c_RRc[i]) / (t_Dc*t_D[i] + c_RRc[i])));
  33.     }
  34.  
  35.     //Method of Least Square to Determine the Plate Constants
  36.     Vector ones(n,1);
  37.     Vector zeros(n,0);
  38.  
  39.     Matrix A_Mat = {
  40.         { X },
  41.         { Y },
  42.         { ones },
  43.         { Xi },
  44.         { zeros }
  45.     };
  46.    
  47.     Matrix B_Mat = {
  48.         { X },
  49.         { Y },
  50.         { ones },
  51.         { Eta },
  52.         { zeros }
  53.     };
  54.  
  55.     Vector ab = LeastSquare(A_Mat);
  56.     Vector de = LeastSquare(B_Mat);
  57.  
  58.     ab[0] -= 1;
  59.     de[1] -= 1;
  60.  
  61.     int numDebris = Xd.size();
  62.  
  63.     Vector Xi_d(numDebris);
  64.     Vector Eta_d(numDebris);
  65.  
  66.     for (int i=0;i<numDebris;i++){
  67.         Xi_d[i] = (ab[0]+1)*Xd[i]+ab[1]*Yd[i]+ab[2];
  68.         Eta_d[i] = de[0]*Xd[i]+(de[1]+1)*Yd[i]+de[2];
  69.     }
  70.    
  71.     //Determine the Right Ascension and Declination of the Debris
  72.     Vector t_RdRc, Rd1, t_Dd, Dd1;
  73.     Matrix Rd, Dd;
  74.    
  75.     for(int i=0;i<numDebris;i++){
  76.         t_RdRc.push_back(Xi_d[i]/(cos(Dc_decimal[i]) - Eta_d[i]*sin(Dc_decimal[i])));
  77.         Rd1.push_back(atan(t_RdRc[i])+Rc_decimal[i]);
  78.         t_Dd.push_back(((Eta_d[i]*cos(Dc_decimal[i])+sin(Dc_decimal[i]))*(sin(Rd1[i]-Rc_decimal[i])))/Xi_d[i]);
  79.         Dd1.push_back(atan(t_Dd[i]));
  80.     }
  81.  
  82.     Rd = D2S(Rd1, 'r','r');
  83.     Dd =D2S(Dd1,'d','r');
  84.    
  85.     return make_pair(Rd,Dd);
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement