Advertisement
Guest User

Untitled

a guest
Feb 18th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. function [r] = Sun(JD,AUkm)
  2. %Converts relative position of sun from JD in either AU or km
  3. %Vallado Pg 266
  4.  
  5. T_UT1 = (JD-2451545)/36525;
  6. T_TDB = T_UT1;
  7. L_M = 280.460 + 36000.7700*T_TDB;
  8. M = 357.52772333 + 35999.05344*T_TDB;
  9. L_ec = L_M + 1.914666471 * sind(M) + 0.019994643 * sind(2*M);
  10. r_s = 1.000140612 - .016708617*cosd(M) - 0.000139589 * cosd(2*M);
  11. e = 23.439291 - 0.0130042 * T_TDB;
  12.  
  13. AU = 149597870.7;
  14.  
  15. if AUkm == 1
  16. p = AU.*[r_s*cosd(L_ec);r_s*cosd(e)*sind(L_ec);r_s*sind(e)*sind(L_ec)];
  17. else
  18. p = [r_s*cosd(L_ec);r_s*cosd(e)*sind(L_ec);r_s*sind(e)*sind(L_ec)];
  19. end
  20.  
  21. [yyyy, mm, dd, hh, min, ss] = invjday(JD);
  22. JD_new = cal2mjd(yyyy,mm,dd,hh,min,ss+37+32.184);
  23. T_JD = (JD_new-2451545)/36525;
  24.  
  25. r = MoD(p,T_JD);
  26.  
  27. end
  28.  
  29. function ToD2MoD = MoD(r,T_UT1)
  30. % Converts ToD to MoD
  31.  
  32. a = 2306.2181 * T_UT1/3600 + 0.30188 * T_UT1^2 + 0.017998 * T_UT1^3;
  33. b = 2004.3109 * T_UT1/3600 - 0.42665 * T_UT1^2 - 0.041833 * T_UT1^3;
  34. c = 2306.2181 * T_UT1/3600 + 1.09468 * T_UT1^2 + 0.018203 * T_UT1^3;
  35.  
  36. % GCRF = rot(a,3) * rot(-b,2) * rot(c,3) * r;
  37. GCRF = rot(a,3) * rot(-b,2) * rot(c,3) * r;
  38. B = rot(0.0146/3600,3) * rot(0.16617/3600,2) * rot(-0.0068192/3600,1);
  39.  
  40. ToD2MoD = B\GCRF;
  41. end
  42.  
  43. function [mat] = rot(phi,num)
  44. %Gives rotation matrix given angle and number
  45. %Must be in radians
  46.  
  47. phi = deg2rad(phi);
  48. mat = zeros(3);
  49.  
  50. if num == 1
  51. mat = [1 0 0;0 cos(phi) sin(phi);0 -sin(phi) cos(phi)];
  52. elseif num == 2
  53. mat = [cos(phi) 0 -sin(phi);0 1 0;sin(phi) 0 cos(phi)];
  54. elseif num == 3
  55. mat = [cos(phi) sin(phi) 0;-sin(phi) cos(phi) 0;0 0 1];
  56. end
  57.  
  58. end
  59.  
  60. function [JD,MJD] = cal2mjd(yyyy,mm,dd,hh,min,ss)
  61. %Converts calendar time to MJD
  62.  
  63. cal = 1721013.5;
  64. cal1 = cal - 2400000.5;
  65.  
  66. JD = 367*yyyy-floor((7*(yyyy+floor((mm+9)/12)))/4)+floor(275*mm/9)+dd+cal+...
  67. (hh+(min+ss/60)/60)/24;
  68.  
  69. MJD = 367*yyyy-floor((7*(yyyy+floor((mm+9)/12)))/4)+floor(275*mm/9)+dd+cal1+...
  70. (hh+(min+ss/60)/60)/24;
  71.  
  72. end
  73.  
  74. function [year, month, day, hr, min, sec] = invjday(jd)
  75. z = fix(jd + .5);
  76. fday = jd + .5 - z;
  77. if (fday < 0)
  78. fday = fday + 1;
  79. z = z - 1;
  80. end
  81. if (z < 2299161)
  82. a = z;
  83. else
  84. alpha = floor((z - 1867216.25) / 36524.25);
  85. a = z + 1 + alpha - floor(alpha / 4);
  86. end
  87. b = a + 1524;
  88. c = fix((b - 122.1) / 365.25);
  89. d = fix(365.25 * c);
  90. e = fix((b - d) / 30.6001);
  91. day = b - d - fix(30.6001 * e) + fday;
  92. if (e < 14)
  93. month = e - 1;
  94. else
  95. month = e - 13;
  96. end
  97. if (month > 2)
  98. year = c - 4716;
  99. else
  100. year = c - 4715;
  101. end
  102. hr = abs(day-floor(day))*24;
  103. min = abs(hr-floor(hr))*60;
  104. sec = abs(min-floor(min))*60;
  105. day = floor(day);
  106. hr = floor(hr);
  107. min = floor(min);
  108.  
  109. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement