Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.45 KB | None | 0 0
  1. using System;
  2.  
  3. namespace ConsoleApp4
  4.  
  5. {
  6.  
  7. class Program
  8.  
  9. {
  10.  
  11. public static int i = 0;
  12.  
  13. public static double JD3;
  14.  
  15. public static double JD31;
  16.  
  17. public static double JD30;
  18.  
  19. static void Main(string[] args)
  20.  
  21. {
  22.  
  23. Console.WriteLine("Введите первую дату:");
  24.  
  25. Console.WriteLine("Пример: 01.01.2000 12:00:00");
  26.  
  27. var today = DateTime.Parse(Console.ReadLine());
  28.  
  29. Console.WriteLine("Введите вторую дату:");
  30.  
  31. var today1 = DateTime.Parse(Console.ReadLine());
  32.  
  33. Console.WriteLine("Введите часовой пояс от -12 до 12");
  34.  
  35. int z = Convert.ToInt32(Console.ReadLine());
  36.  
  37. double Y = today.Year;
  38.  
  39. double M = today.Month;
  40.  
  41. double D = today.Day;
  42.  
  43. double h = today.Hour;
  44.  
  45. double m = today.Minute;
  46.  
  47. double s = today.Second;
  48.  
  49. if (M < 3)
  50.  
  51. {
  52.  
  53. M = M + 12;
  54.  
  55. Y = Y - 1;
  56.  
  57. }
  58.  
  59. double A = Y / 100;
  60.  
  61. double C = Math.Truncate(A);
  62.  
  63. double B = 2 - C + Math.Truncate(C / 4);
  64.  
  65. double JD = Math.Truncate((365.25 * (Y + 4716))) + Math.Truncate((30.6001 * (M + 1))) + D + B - 1524.5 + ((h + m / 60 + s / 3600) / (24));
  66.  
  67. // Вторая дата
  68.  
  69. double Y1 = today1.Year;
  70.  
  71. double M1 = today1.Month;
  72.  
  73. double D1 = today1.Day;
  74.  
  75. double h1 = today1.Hour;
  76.  
  77. double m1 = today1.Minute;
  78.  
  79. double s1 = today1.Second;
  80.  
  81. if (M1 < 3)
  82.  
  83. {
  84.  
  85. M1 = M1 + 12;
  86.  
  87. Y1 = Y1 - 1;
  88.  
  89. }
  90.  
  91. double A1 = Y1 / 100;
  92.  
  93. double C1 = Math.Truncate(A1);
  94.  
  95. double B1 = 2 - C1 + Math.Truncate(C1 / 4);
  96.  
  97. double JD1 = Math.Truncate((365.25 * (Y1 + 4716))) + Math.Truncate((30.6001 * (M1 + 1))) + D1 + B1 - 1524.5 + ((h1 + m1 / 60 + s1 / 3600) / (24));
  98.  
  99. DateTime qw = today;
  100.  
  101. double JDs3, JDf3;
  102.  
  103. JDs3 = JD;
  104.  
  105. JDf3 = JD1;
  106.  
  107. JD3 = JDs3;
  108.  
  109. while (JD3 <= JDf3)
  110.  
  111. {
  112.  
  113. double todayJD = Moon(JD3);
  114.  
  115. DateTime qw1 = qw;
  116.  
  117. JD31 = JD3;
  118.  
  119. JD31++;
  120.  
  121. double tomorrow = Moon(JD31);
  122.  
  123. DateTime qw0 = qw;
  124.  
  125. JD30 = JD3;
  126.  
  127. JD30--;
  128.  
  129. double yestarday = Moon(JD30);
  130.  
  131. if (yestarday < todayJD && tomorrow < todayJD)//интерполяция
  132.  
  133. {
  134.  
  135. double aa = (tomorrow + yestarday) / 2 - todayJD;
  136.  
  137. double bb = (tomorrow - yestarday) / 2;
  138.  
  139. double Xe = (0 - bb) / (2 * aa) + JD3;
  140.  
  141. double LL = 0, BB = 0;
  142.  
  143. MoonCrd(Xe, out LL, out BB);
  144.  
  145. LL = LL - (Math.Truncate(LL / 360) * 360);
  146.  
  147. if (LL < 0) LL = LL + 360;
  148.  
  149. double T = (Xe - 2415020) / 36525;
  150.  
  151. double P = 334.329556 + 4069.0340 * T - 0.010325 * T * T - 0.0000125 * T * T * T;
  152.  
  153. P = P - (Math.Truncate(P / 360) * 360);
  154.  
  155. if (P < 0) P = P + 360;
  156.  
  157. double sravnen = Math.Abs(LL - P);
  158.  
  159. if (sravnen > 300)
  160.  
  161. {
  162.  
  163. if (LL < P) LL = LL + 360;
  164.  
  165. if (LL > P) P = P + 360;
  166.  
  167. }
  168.  
  169. sravnen = Math.Abs(LL - P);
  170.  
  171. double grad = 14;
  172.  
  173. if (grad >= sravnen)
  174.  
  175. {
  176.  
  177. double Tc = (Xe - 51544.5) / 36525;
  178.  
  179. double la = 134.96298139 + (477198.8673980556 + (0.00869722 + 0.00001778 * Tc) * Tc) * Tc;
  180.  
  181. la = la * 0.017453293;
  182.  
  183. double li = 357.52772333 + (35999.0503400000 - (0.00016028 + 0.00000333 * Tc) * Tc) * Tc;
  184.  
  185. li = li * 0.017453293;
  186.  
  187. double D1I = 297.85036306 + (445267.1114800000 - (0.00191417 - 0.00000528 * Tc) * Tc) * Tc;
  188.  
  189. D1I = D1I * 0.017453293;
  190.  
  191. double SINGPARALAKS = 3422.70 + 28.233869 * Math.Cos(2 * D1I) + 3.08589 * Math.Cos(la + 2 * D1I) + 186.539296 *
  192.  
  193. Math.Cos(la) + 34.311569 * Math.Cos(la - 2 * D1I) + 1.916735 * Math.Cos(li - 2 * D1I) - 0.977818 *
  194.  
  195. Math.Cos(D1I) + 10.165933 * Math.Cos(2 * la) - 0.949147 * Math.Cos(la * li) + 1.443617 * Math.Cos(la + li - 2 * D1I);
  196.  
  197. double R = 6378.14 / (0.00000484791004526407 * SINGPARALAKS);
  198.  
  199. DateTime popo = qw;
  200.  
  201. double Time = (Xe - JD3) * 24;
  202.  
  203. double qqq = Math.Truncate(Time);
  204.  
  205. double ww = Time - qqq;
  206.  
  207. ww = ww * 60;
  208.  
  209. ww = Math.Round(ww);
  210.  
  211. int pp = Convert.ToInt32(qqq);
  212.  
  213. int po = Convert.ToInt32(ww);
  214.  
  215. popo = popo.AddHours(pp);
  216.  
  217. popo = popo.AddMinutes(po);
  218.  
  219. popo = popo.AddHours(z);
  220.  
  221. R = Math.Round(R);
  222.  
  223. double eee = LL - Math.Round(LL);
  224.  
  225. eee = eee * 100 / 60;
  226.  
  227. LL = Math.Round(LL);
  228.  
  229. eee = eee * 100;
  230.  
  231. eee = Math.Abs(eee);
  232.  
  233. eee = Math.Round(eee);
  234.  
  235. double eee1 = BB - Math.Round(BB);
  236.  
  237. eee1 = eee1 * 100 / 60;
  238.  
  239. BB = Math.Round(BB);
  240.  
  241. eee1 = eee1 * 100;
  242.  
  243. eee1 = Math.Abs(eee1);
  244.  
  245. eee1 = Math.Round(eee1);
  246.  
  247. Console.WriteLine("Дата суперлуния: " + popo.ToString("dd.MM.yyyy HH:mm"));
  248.  
  249. Console.WriteLine("Расстояние от Земли до Луны: " + R);
  250.  
  251. Console.WriteLine("Долгота: " + LL + " градуса " + eee + " минут");
  252.  
  253. Console.WriteLine("Широта: " + BB + " градуса " + eee1 + " минут");
  254.  
  255. Console.WriteLine("-------------------------------------------------------");
  256.  
  257. i++;
  258.  
  259. if (i == 12)
  260.  
  261. {
  262.  
  263. Console.WriteLine("Чтобы вывести ещё 12 значений нажмите Enter");
  264.  
  265. Console.ReadKey();
  266.  
  267. i = 0;
  268.  
  269. }
  270.  
  271. }
  272.  
  273. }
  274.  
  275. qw = qw.AddDays(1);
  276.  
  277. qw1 = qw1.AddDays(1);
  278.  
  279. qw0 = qw0.AddDays(1);
  280.  
  281. JD3++;
  282.  
  283. }
  284.  
  285. Console.ReadKey();
  286.  
  287. }
  288.  
  289. static double Moon(double JD3)
  290.  
  291. {
  292.  
  293. double JDm = JD3 - 2400000.5;
  294.  
  295. double Tc = (JDm - 51544.5) / 36525;
  296.  
  297. double SA = 6.23999846 + 628.30194562 * Tc;
  298.  
  299. double SD = 5.19870752 + 7771.37722506 * Tc;
  300.  
  301. double Dl = 6892.76 * Math.Sin(SA) + 71.98 * Math.Sin(2 * SA);
  302.  
  303. double Dr = (-16707.4 + 42.0 * Tc) * Math.Cos(SA) - 139.57 * Math.Cos(2 * SA) + 30.76 * Math.Cos(SD);
  304.  
  305. double L = ((4.93823996 + SA) / 0.017453293) + ((6191.2 * Tc + Dl) / 3600);
  306.  
  307. L = L * 0.017453293;
  308.  
  309. double R = 1.0001398 + 0.000001 * Dr;
  310.  
  311. double lam = 218.31643250 + (481267.8812772222 - (0.00161167 - 0.00000528 * Tc) * Tc) * Tc;
  312.  
  313. lam = lam * 0.017453293;
  314.  
  315. double la = 134.96298139 + (477198.8673980556 + (0.00869722 + 0.00001778 * Tc) * Tc) * Tc;
  316.  
  317. la = la * 0.017453293;
  318.  
  319. double li = 357.52772333 + (35999.0503400000 - (0.00016028 + 0.00000333 * Tc) * Tc) * Tc;
  320.  
  321. li = li * 0.017453293;
  322.  
  323. double D1I = 297.85036306 + (445267.1114800000 - (0.00191417 - 0.00000528 * Tc) * Tc) * Tc;
  324.  
  325. D1I = D1I * 0.017453293;
  326.  
  327. double F = 93.27191028 + (483202.0175380555 - (0.00368250 - 0.00000306 * Tc) * Tc) * Tc;
  328.  
  329. F = F * 0.017453293;
  330.  
  331. double dl = 22640 * Math.Sin(la) - 4586 * Math.Sin(la - 2 * D1I) + 2370 * Math.Sin(2 * D1I) + 769 * Math.Sin(2 * la) - 668 * Math.Sin(li) - 412 * Math.Sin(2 * F) - 212
  332.  
  333. * Math.Sin(2 * la - 2 * D1I) - 206 * Math.Sin(la + li - 2 * D1I) + 192 * Math.Sin(la + 2 * D1I) - 165 * Math.Sin(li - 2 * D1I) - 125 * Math.Sin(D1I) - 110 * Math.Sin(la + li) + 148 *
  334.  
  335. Math.Sin(la - li) - 55 * Math.Sin(2 * F - 2 * D1I);
  336.  
  337. double MonL = lam + (dl / 3600) * 0.017453293;
  338.  
  339. double ds = F + (dl + 412 + Math.Sin(2 * F) + 541 * Math.Sin(li)) * 0.017453293;
  340.  
  341. double dn = -526 * Math.Sin(F - 2 * D1I) + 44 * Math.Sin(la + F - 2 * D1I) - 31 * Math.Sin(-la + F - 2 * D1I) - 23 * Math.Sin(li + F - 2 * D1I) +
  342.  
  343. 11 * Math.Sin(-li + F - 2 * D1I) - 25 * Math.Sin(-2 * la + F) + 21 * Math.Sin(-la + F);
  344.  
  345. double Bas = (18520 * Math.Sin(ds) + dn) / 3600;
  346.  
  347. Bas = Bas * 0.017453293;
  348.  
  349. double Ilongac = Math.Acos(Math.Cos(L - MonL) * Math.Cos(Bas));
  350.  
  351. double faza = 3.141592654 - Ilongac;
  352.  
  353. double fazaMoon = (1 + Math.Cos(faza)) / 2;
  354.  
  355. return fazaMoon;
  356.  
  357. }
  358.  
  359. static void MoonCrd(double JD, out double LL, out double BB)
  360.  
  361. {
  362.  
  363. double JDm = JD3 - 2400000.5;
  364.  
  365. double Tc = (JDm - 51544.5) / 36525;
  366.  
  367. double lam = 218.31643250 + (481267.8812772222 - (0.00161167 - 0.00000528 * Tc) * Tc) * Tc;
  368.  
  369. double la = 134.96298139 + (477198.8673980556 + (0.00869722 + 0.00001778 * Tc) * Tc) * Tc;
  370.  
  371. la = la * 0.017453293;
  372.  
  373. double li = 357.52772333 + (35999.0503400000 - (0.00016028 + 0.00000333 * Tc) * Tc) * Tc;
  374.  
  375. li = li * 0.017453293;
  376.  
  377. double D1I = 297.85036306 + (445267.1114800000 - (0.00191417 - 0.00000528 * Tc) * Tc) * Tc;
  378.  
  379. D1I = D1I * 0.017453293;
  380.  
  381. double F = 93.27191028 + (483202.0175380555 - (0.00368250 - 0.00000306 * Tc) * Tc) * Tc;
  382.  
  383. F = F * 0.017453293;
  384.  
  385. double dl = 22640 * Math.Sin(la) - 4586 * Math.Sin(la - 2 * D1I) + 2370 * Math.Sin(2 * D1I) + 769 * Math.Sin(2 * la) - 668
  386.  
  387. * Math.Sin(li) - 412 * Math.Sin(2 * F) - 212 * Math.Sin(2 * la - 2 * D1I) - 206 * Math.Sin(la + li - 2 * D1I) + 192
  388.  
  389. * Math.Sin(la + 2 * D1I) - 165 * Math.Sin(li - 2 * D1I) - 125 * Math.Sin(D1I) - 110 * Math.Sin(la + li) + 148 * Math.Sin(la - li) - 55 * Math.Sin(2 * F - 2 * D1I);
  390.  
  391. LL = lam + (dl / 3600);
  392.  
  393. double ds = F + (dl + 412 + Math.Sin(2 * F) + 541 * Math.Sin(li)) * 0.017453293;
  394.  
  395. double dn = -526 * Math.Sin(F - 2 * D1I) + 44 * Math.Sin(la + F - 2 * D1I) - 31 * Math.Sin(-la + F - 2 * D1I) - 23 * Math.Sin(li + F - 2 * D1I) + 11
  396.  
  397. * Math.Sin(-li + F - 2 * D1I) - 25 * Math.Sin(-2 * la + F) + 21 * Math.Sin(-la + F);
  398.  
  399. BB = (18520 * Math.Sin(ds) + dn) / 3600;
  400.  
  401. }
  402.  
  403. }
  404.  
  405. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement