Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace ConsoleApp4
- {
- class Program
- {
- public static int i = 0;
- public static double JD3;
- public static double JD31;
- public static double JD30;
- static void Main(string[] args)
- {
- Console.WriteLine("Введите первую дату:");
- Console.WriteLine("Пример: 01.01.2000 12:00:00");
- var today = DateTime.Parse(Console.ReadLine());
- Console.WriteLine("Введите вторую дату:");
- var today1 = DateTime.Parse(Console.ReadLine());
- Console.WriteLine("Введите часовой пояс от -12 до 12");
- int z = Convert.ToInt32(Console.ReadLine());
- double Y = today.Year;
- double M = today.Month;
- double D = today.Day;
- double h = today.Hour;
- double m = today.Minute;
- double s = today.Second;
- if (M < 3)
- {
- M = M + 12;
- Y = Y - 1;
- }
- double A = Y / 100;
- double C = Math.Truncate(A);
- double B = 2 - C + Math.Truncate(C / 4);
- double JD = Math.Truncate((365.25 * (Y + 4716))) + Math.Truncate((30.6001 * (M + 1))) + D + B - 1524.5 + ((h + m / 60 + s / 3600) / (24));
- // Вторая дата
- double Y1 = today1.Year;
- double M1 = today1.Month;
- double D1 = today1.Day;
- double h1 = today1.Hour;
- double m1 = today1.Minute;
- double s1 = today1.Second;
- if (M1 < 3)
- {
- M1 = M1 + 12;
- Y1 = Y1 - 1;
- }
- double A1 = Y1 / 100;
- double C1 = Math.Truncate(A1);
- double B1 = 2 - C1 + Math.Truncate(C1 / 4);
- double JD1 = Math.Truncate((365.25 * (Y1 + 4716))) + Math.Truncate((30.6001 * (M1 + 1))) + D1 + B1 - 1524.5 + ((h1 + m1 / 60 + s1 / 3600) / (24));
- DateTime qw = today;
- double JDs3, JDf3;
- JDs3 = JD;
- JDf3 = JD1;
- JD3 = JDs3;
- while (JD3 <= JDf3)
- {
- double todayJD = Moon(JD3);
- DateTime qw1 = qw;
- JD31 = JD3;
- JD31++;
- double tomorrow = Moon(JD31);
- DateTime qw0 = qw;
- JD30 = JD3;
- JD30--;
- double yestarday = Moon(JD30);
- if (yestarday < todayJD && tomorrow < todayJD)//интерполяция
- {
- double aa = (tomorrow + yestarday) / 2 - todayJD;
- double bb = (tomorrow - yestarday) / 2;
- double Xe = (0 - bb) / (2 * aa) + JD3;
- double LL = 0, BB = 0;
- MoonCrd(Xe, out LL, out BB);
- LL = LL - (Math.Truncate(LL / 360) * 360);
- if (LL < 0) LL = LL + 360;
- double T = (Xe - 2415020) / 36525;
- double P = 334.329556 + 4069.0340 * T - 0.010325 * T * T - 0.0000125 * T * T * T;
- P = P - (Math.Truncate(P / 360) * 360);
- if (P < 0) P = P + 360;
- double sravnen = Math.Abs(LL - P);
- if (sravnen > 300)
- {
- if (LL < P) LL = LL + 360;
- if (LL > P) P = P + 360;
- }
- sravnen = Math.Abs(LL - P);
- double grad = 14;
- if (grad >= sravnen)
- {
- double Tc = (Xe - 51544.5) / 36525;
- double la = 134.96298139 + (477198.8673980556 + (0.00869722 + 0.00001778 * Tc) * Tc) * Tc;
- la = la * 0.017453293;
- double li = 357.52772333 + (35999.0503400000 - (0.00016028 + 0.00000333 * Tc) * Tc) * Tc;
- li = li * 0.017453293;
- double D1I = 297.85036306 + (445267.1114800000 - (0.00191417 - 0.00000528 * Tc) * Tc) * Tc;
- D1I = D1I * 0.017453293;
- double SINGPARALAKS = 3422.70 + 28.233869 * Math.Cos(2 * D1I) + 3.08589 * Math.Cos(la + 2 * D1I) + 186.539296 *
- Math.Cos(la) + 34.311569 * Math.Cos(la - 2 * D1I) + 1.916735 * Math.Cos(li - 2 * D1I) - 0.977818 *
- Math.Cos(D1I) + 10.165933 * Math.Cos(2 * la) - 0.949147 * Math.Cos(la * li) + 1.443617 * Math.Cos(la + li - 2 * D1I);
- double R = 6378.14 / (0.00000484791004526407 * SINGPARALAKS);
- DateTime popo = qw;
- double Time = (Xe - JD3) * 24;
- double qqq = Math.Truncate(Time);
- double ww = Time - qqq;
- ww = ww * 60;
- ww = Math.Round(ww);
- int pp = Convert.ToInt32(qqq);
- int po = Convert.ToInt32(ww);
- popo = popo.AddHours(pp);
- popo = popo.AddMinutes(po);
- popo = popo.AddHours(z);
- R = Math.Round(R);
- double eee = LL - Math.Round(LL);
- eee = eee * 100 / 60;
- LL = Math.Round(LL);
- eee = eee * 100;
- eee = Math.Abs(eee);
- eee = Math.Round(eee);
- double eee1 = BB - Math.Round(BB);
- eee1 = eee1 * 100 / 60;
- BB = Math.Round(BB);
- eee1 = eee1 * 100;
- eee1 = Math.Abs(eee1);
- eee1 = Math.Round(eee1);
- Console.WriteLine("Дата суперлуния: " + popo.ToString("dd.MM.yyyy HH:mm"));
- Console.WriteLine("Расстояние от Земли до Луны: " + R);
- Console.WriteLine("Долгота: " + LL + " градуса " + eee + " минут");
- Console.WriteLine("Широта: " + BB + " градуса " + eee1 + " минут");
- Console.WriteLine("-------------------------------------------------------");
- i++;
- if (i == 12)
- {
- Console.WriteLine("Чтобы вывести ещё 12 значений нажмите Enter");
- Console.ReadKey();
- i = 0;
- }
- }
- }
- qw = qw.AddDays(1);
- qw1 = qw1.AddDays(1);
- qw0 = qw0.AddDays(1);
- JD3++;
- }
- Console.ReadKey();
- }
- static double Moon(double JD3)
- {
- double JDm = JD3 - 2400000.5;
- double Tc = (JDm - 51544.5) / 36525;
- double SA = 6.23999846 + 628.30194562 * Tc;
- double SD = 5.19870752 + 7771.37722506 * Tc;
- double Dl = 6892.76 * Math.Sin(SA) + 71.98 * Math.Sin(2 * SA);
- double Dr = (-16707.4 + 42.0 * Tc) * Math.Cos(SA) - 139.57 * Math.Cos(2 * SA) + 30.76 * Math.Cos(SD);
- double L = ((4.93823996 + SA) / 0.017453293) + ((6191.2 * Tc + Dl) / 3600);
- L = L * 0.017453293;
- double R = 1.0001398 + 0.000001 * Dr;
- double lam = 218.31643250 + (481267.8812772222 - (0.00161167 - 0.00000528 * Tc) * Tc) * Tc;
- lam = lam * 0.017453293;
- double la = 134.96298139 + (477198.8673980556 + (0.00869722 + 0.00001778 * Tc) * Tc) * Tc;
- la = la * 0.017453293;
- double li = 357.52772333 + (35999.0503400000 - (0.00016028 + 0.00000333 * Tc) * Tc) * Tc;
- li = li * 0.017453293;
- double D1I = 297.85036306 + (445267.1114800000 - (0.00191417 - 0.00000528 * Tc) * Tc) * Tc;
- D1I = D1I * 0.017453293;
- double F = 93.27191028 + (483202.0175380555 - (0.00368250 - 0.00000306 * Tc) * Tc) * Tc;
- F = F * 0.017453293;
- 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
- * 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 *
- Math.Sin(la - li) - 55 * Math.Sin(2 * F - 2 * D1I);
- double MonL = lam + (dl / 3600) * 0.017453293;
- double ds = F + (dl + 412 + Math.Sin(2 * F) + 541 * Math.Sin(li)) * 0.017453293;
- 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 * Math.Sin(-li + F - 2 * D1I) - 25 * Math.Sin(-2 * la + F) + 21 * Math.Sin(-la + F);
- double Bas = (18520 * Math.Sin(ds) + dn) / 3600;
- Bas = Bas * 0.017453293;
- double Ilongac = Math.Acos(Math.Cos(L - MonL) * Math.Cos(Bas));
- double faza = 3.141592654 - Ilongac;
- double fazaMoon = (1 + Math.Cos(faza)) / 2;
- return fazaMoon;
- }
- static void MoonCrd(double JD, out double LL, out double BB)
- {
- double JDm = JD3 - 2400000.5;
- double Tc = (JDm - 51544.5) / 36525;
- double lam = 218.31643250 + (481267.8812772222 - (0.00161167 - 0.00000528 * Tc) * Tc) * Tc;
- double la = 134.96298139 + (477198.8673980556 + (0.00869722 + 0.00001778 * Tc) * Tc) * Tc;
- la = la * 0.017453293;
- double li = 357.52772333 + (35999.0503400000 - (0.00016028 + 0.00000333 * Tc) * Tc) * Tc;
- li = li * 0.017453293;
- double D1I = 297.85036306 + (445267.1114800000 - (0.00191417 - 0.00000528 * Tc) * Tc) * Tc;
- D1I = D1I * 0.017453293;
- double F = 93.27191028 + (483202.0175380555 - (0.00368250 - 0.00000306 * Tc) * Tc) * Tc;
- F = F * 0.017453293;
- 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 * 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 * Math.Sin(la - li) - 55 * Math.Sin(2 * F - 2 * D1I);
- LL = lam + (dl / 3600);
- double ds = F + (dl + 412 + Math.Sin(2 * F) + 541 * Math.Sin(li)) * 0.017453293;
- 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
- * Math.Sin(-li + F - 2 * D1I) - 25 * Math.Sin(-2 * la + F) + 21 * Math.Sin(-la + F);
- BB = (18520 * Math.Sin(ds) + dn) / 3600;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement