logo资料库

GPS卫星坐标计算.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
try { //参数赋值 double ss1 = 0.00000001, ss2 = 1000000,we=7.2921151467*ss1*1000; double pi = 3.1415926535; string[] str = textBox2.Text.Trim().Split(' '); double[,] a = new double[7, 4]; int k = 0; for (int i = 0; i < 7; i++) { for (int j = 0; j < 4; j++) { a[i, j] = Convert.ToDouble(str[k]); k++; } } //规划时刻计算 int[] dinmth = new int[12]; double year, month, day, hour, minute, second, dayofy, ttlday, dayofw, gpstime, tk; int weekno; dinmth[0] = 31; dinmth[1] = 28; dinmth[2] = 31; dinmth[3] = 30; dinmth[4] = 31; dinmth[5] = 30; dinmth[6] = 31; dinmth[7] = 31; dinmth[8] = 30; dinmth[9] = 31; dinmth[10] = 30; dinmth[11] = 31; year = Convert.ToDouble(textBox21.Text); month = Convert.ToDouble(textBox22.Text); day = Convert.ToDouble(textBox23.Text); hour = Convert.ToDouble(textBox24.Text); minute = Convert.ToDouble(textBox25.Text); second = Convert.ToDouble(textBox26.Text); if (month == 1) { dayofy = day; } else { dayofy = 0; for (int i = 0; i < 12; i++) { dayofy += dinmth[i]; if (i == 1) {
400 == 0) if (year % 4 == 0 && year % 100 != 0 || year % dayofy += 1; } } dayofy += day; } ttlday = 360; for (int yr = 1981; yr < year; yr++) { ttlday += 365; if (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0) { ttlday += 1; } } ttlday += dayofy; weekno = (int)(ttlday / 7); dayofw = ttlday - 7 * weekno; gpstime = hour * 3600 + minute * 60 + second + dayofw * tk = gpstime - a[3, 0] * ss2; if (tk > 302400) { tk -= 604800; } else if(tk<-302400) { tk += 602400; } app.value1 = tk.ToString("e2"); //平均角速度计算 double n0, n; n0 = (Math.Sqrt(3986004.418) / Math.Pow(a[2, 3], 3)) * n = n0 + a[1, 2] * ss1; app.value2 = n.ToString("e2"); //平近点角计算 double M0, Mk; M0 = a[1, 3]; Mk = M0 * 10 + n * tk; if (Math.Abs(Mk) > 2 * pi) { 86400; ss1;
int w1 = (int)(Mk / (2 * pi)); Mk = Mk - 2 * pi * w1; } app.value3 = Mk.ToString("e2"); //偏近点角计算 double Ek, E0; Ek = Mk; do { E0 = Ek; Ek = Mk + a[2, 1] * 0.1 * Math.Sin(E0); } while (Math.Abs(Ek - E0) > 0.00000001); app.value4 = Ek.ToString("e2"); //真近点角 double angle1, angle2, Vk; angle1 = Math.Sqrt(1 - Math.Pow(a[2, 1] * 0.1, 2)) * Math.Sin(Ek); angle2 = Math.Cos(Ek) - a[2, 1] * 0.1; Vk = Math.Atan(Math.Abs(angle1 / angle2)); if (angle1 >= 0 && angle2 <= 0) { Vk = pi - Vk; } else if (angle1 <= 0 && angle2 <=0) { Vk = pi + Vk; } else { Vk = 2 * pi - Vk; } app.value5 = Vk.ToString("e"); //升交角距 double Qk; Qk = Vk + a[4, 2] * 10; if (Math.Abs(Qk) > 2 * pi) { int w2 = (int)(Qk / (2 * pi)); Qk = Qk - 2 * pi * w2; } app.value6 = Qk.ToString("e"); //升交角距改正,轨道向径改正,轨道倾角改正计算 double Fu, Fr, Fi; Fu = a[2, 0] * ss1 * 1000 * Math.Cos(2 * Qk) + a[2, 2]
* ss1 * 1000 * Math.Sin(2 * Qk); Fr = a[4, 1] * 1000 * Math.Cos(2 * Qk) + a[1, 1] * 100 * Math.Sin(2 * Qk); Fi = a[3, 1] * ss1 * 100 * Math.Cos(2 * Qk) + a[3, 3] * ss1 * 10 * Math.Sin(2 * Qk); app.value7 = Fu.ToString("e"); app.value8 = Fr.ToString("e"); app.value9 = Fi.ToString("e"); //改正后升交角距、轨道向径、轨道倾角计算 double Uk, Rk, Ik; Uk = Qk + Fu; Rk = Math.Pow(a[2, 3] * ss2 * 0.01, 2) * (1 - a[2, 1] * 0.1 * Math.Cos(Ek)) + Fr; Ik = a[4, 0] + Fi + a[5, 0] * ss1 * 0.1 * tk; app.value10 = Uk.ToString("e"); app.value11 = Rk.ToString("e"); app.value12 = Ik.ToString("e"); //升交点轨道直角坐标系坐标计算 double Xk, Yk; Xk = Rk * Math.Cos(Uk); Yk = Rk * Math.Sin(Uk); app.value13 = Xk.ToString("e"); app.value14 = Yk.ToString("e"); //升交点经度计算 double N; int w3; N = a[3, 2] * 10 + (a[4, 3] * ss1 - we) * tk - we * a[3, 0] * ss2; if (Math.Abs(N) > 2 * pi) { w3 =(int)(N / (2 * pi)); N = N - 2 * pi * w3; } app.value15 =N.ToString("e"); //地固坐标系下卫星空间直角坐标计算,Ik 为 ik double X, Y, Z; X = Xk * Math.Cos(N) - Yk * Math.Cos(Ik) * Math.Sin(N); Y = Xk * Math.Sin(N) + Yk * Math.Cos(Ik) * Math.Cos(N); Z = Yk * Math.Sin(Ik); app.value16 = X.ToString("e"); app.value17 = Y.ToString("e"); app.value18 = Z.ToString("e"); new Form2().ShowDialog();
} catch { MessageBox.Show("请输入卫星时刻或又一次加载卫星参数导致 出错"); return; }
分享到:
收藏