VC组件开发实验_第1页
VC组件开发实验_第2页
VC组件开发实验_第3页
VC组件开发实验_第4页
VC组件开发实验_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VS软件设计实验报告-通过广播星历计算卫星位置 学院:地理科学学院 专业:地理信息系统 成员:吴久福、张刚、陈志成一、设计背景:在GPS测量中,计算出卫星在空间中的位置是一个极其重要的步骤,但由于计算参数的数量多、数值大、精度高等原因,所以手工计算过程复杂,时间较长。二、设计目的:设计开发一个小软件用于通过广播星历所给数据计算卫星在空间中的位置,减少手工计算,提高工作效率三、设计工具:Microsoft Visual Studio 2010类库:File类-提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。命名空间是System.I

2、O。本软件设计过程主要使用了OpenFileDialog、System.IO.File.ReadAllLines等,用于直接读取txt文档中的计算参数。 Math类-提供数学运算的方法。本软件设计过程中主要使用了Math.Sqrt(开方)、Math.Abs(绝对值)、Math.Cos(余弦值)、Math.Sin(正弦值)等。四、用广播星历计算卫星位置的计算过程 1 1.计算卫星运动的平均角速度2.计算观测瞬间卫星的平近点角其中,为观测瞬间卫星的平近点角。为参考时刻的平近点角,和 由广播星历给出。3 计算偏近点角E234 计算真近点角5 计算升交角距46 计算卫星向径7 计算摄动项56通过上述的

3、计算过程可知手工计算卫星位置不仅过程复杂繁琐而且很容易出错,中在迭代计算时很难达到精度要求。所以比起手工计算,通过计算机软件计算更符合计算要求和未来发展需求。 7五、软件设计实现用广播星历计算卫星位置1.软件界面:软件参数可以直接在填空处输入,也可单机“打开”按钮,选择TXT文档.但TXT文档中的参数需要按下图所示书写:8计算结果除了可以在界面中显示出来还可以单机“输出”按钮,选择一个TXT文档进行保存。保存结果如下图所示:2.软件代码:using System;using System.Collections.Generic;using System.ComponentModel;using

4、 System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;namespace 用广播星历计算卫星位置 public partial class txti : Form public txti() InitializeComponent(); private void btnOk_Click(object sender, EventArgs e) double GM;/GM是万有引力常数G与地球的总质量M的乘积,值为3.98600

5、5E+14 double a;/卫星轨道长半径 double re;/卫星轨道椭圆扁心率e double sqrt_A;/根号A,广播星历中给定的参数9 double no;/参考时刻toe的平均角速度no double gz_n;/广播星历中给定的摄动参数n double n;/观测时刻卫星的平均角速度n double toe;/广播星历给定的参考时刻toe double Mo;/参考时刻toe时的平近点角Mo double t;/观测时刻t double M;/观测时刻卫星的平近点角M double E;/偏近点角E double E0;/E的迭代初值 double f;/真近点角f do

6、uble w;/近地点角 double u;/升交角距 double r;/卫星向径 double i;/卫星轨道倾角 double Cuc, Cus, Crc, Crs, Cic, Cis;/摄动力影响系数 double s_u, s_r, s_i;/摄动项 double sg_u, sg_r,sg_i;/经摄动改正的升交角距和卫星向径 double x, y;/GPS在轨道平面直角坐标系中的坐标(x,y) double RAo, RA;/。和 double L;/观测瞬间升交点的经度L double We;/地球自转角速度We double X, Y, Z;/卫星在瞬时地球坐标系中的位置(

7、X,Y,Z) double Xcts, Ycts, Zcts;/卫星在协议地球坐标系中的位置(Xcts, Ycts, Zcts) double Xp, Yp;/极移值 /计算卫星运动的平均角速度GM=Convert.ToDouble(lblGM.Text); re = Convert.ToDouble(txte.Text); sqrt_A = Convert.ToDouble(txtGA.Text); no = System.Math.Sqrt(GM)/(sqrt_A * sqrt_A * sqrt_A); lblno.Text = Convert.ToString(no); gz_n = C

8、onvert.ToDouble(txtgzN.Text); n = no + gz_n; lbln.Text = Convert.ToString(n); /计算卫星的长半径 a = sqrt_A * sqrt_A; lbla.Text = Convert.ToString(a); /计算观测瞬间卫星的平近点角 toe = Convert.ToDouble(txtToe.Text); Mo = Convert.ToDouble(txtMo.Text); t = Convert.ToDouble(txtT.Text);10 M = Mo + n * (t - toe); lblM.Text =

9、Convert.ToString(M); /计算偏近点角 E0 = 0; E = M; for (;System.Math.Abs(E - E0) >= 0.1e-30;) E0 = E; E = M + re * System.Math.Sin(E0); lblE.Text = Convert.ToString(E); /计算真近点角 f=System.Math.Atan(System.Math.Sqrt(1-(re*re)*System.Math.Sin(E)/(System. Math.Cos(E)-re); lblf.Text = Convert.ToString(f); /计算

10、升交角距(未改正) w = Convert.ToDouble(txtW.Text); u = w + f; lblu.Text = Convert.ToString(u); /计算卫星向径(未改正) r = a*(1 - re * System.Math.Cos(E); lblr.Text = Convert.ToString(r); /计算摄动项 Cus = Convert.ToDouble(txtCus.Text); Cuc = Convert.ToDouble(txtCuc.Text); Crs = Convert.ToDouble(txtCrs.Text); Crc = Convert

11、.ToDouble(txtCrc.Text); Cis = Convert.ToDouble(txtCis.Text); Cic = Convert.ToDouble(txtCic.Text); s_u = Cuc * System.Math.Cos(2 * u) + Cus * System.Math.Sin(2 * u); s_r = Crc * System.Math.Cos(2 * u) + Crs * System.Math.Sin(2 * u); s_i = Cic * System.Math.Cos(2 * u) + Cis * System.Math.Sin(2 * u); l

12、bls_u.Text = Convert.ToString(s_u); lbls_r.Text = Convert.ToString(s_r); lbls_i.Text = Convert.ToString(s_i); 11/计算经摄动改正的升交角距和卫星向径 i = Convert.ToDouble(txtGDi.Text); sg_u = u + s_u; sg_r = r + s_r; sg_i = i + s_i; lblsg_u.Text = Convert.ToString(sg_u); lblsg_r.Text = Convert.ToString(sg_r); lblsg_i.

13、Text = Convert.ToString(sg_i); /计算GPS在轨道平面直角坐标系中的坐标 x = sg_r * System.Math.Cos(sg_u); y= sg_r * System.Math.Sin(sg_u); lblx.Text = Convert.ToString(x); lbly.Text = Convert.ToString(y); /计算观测瞬间升交点的经度 RAo = Convert.ToDouble(txtRAo.Text); RA = Convert.ToDouble(txtRA.Text); We = Convert.ToDouble(lblWe.T

14、ext); L = RAo + (RA - We) * t - RA * toe; lblL.Text = Convert.ToString(L); /计算卫星在瞬时地球坐标系中的位置 X = x * System.Math.Cos(L) - y * System.Math.Cos(sg_i) * System.Math.Sin(L); Y = x * System.Math.Sin(L) + y * System.Math.Cos(sg_i) * System.Math.Cos(L); Z = y * System.Math.Sin(i); lbl_X.Text = Convert.ToSt

15、ring(X); lbl_Y.Text = Convert.ToString(Y); lbl_Z.Text = Convert.ToString(Z); /计算卫星在协议地球坐标系中的位置 Xp = Convert.ToDouble(txtXp.Text); Yp = Convert.ToDouble(txtYp.Text); Xcts = X + Xp * Z; Ycts = Y - Yp * Z; Zcts = -Xp * X + Yp * Y + Z; lblXcts.Text = Convert.ToString(Xcts); lblYcts.Text = Convert.ToStri

16、ng(Ycts); lblZcts.Text = Convert.ToString(Zcts); 12 /读取TXT文档中的数据 private void button1_Click(object sender, EventArgs e) OpenFileDialog fileName = new OpenFileDialog(); fileName.Filter = "记事本|*.txt" if (fileName.ShowDialog() = DialogResult.OK) string path = fileName.FileName.ToString(); fil

17、eName.OpenFile(); /打开文件 String allLine = System.IO.File.ReadAllLines(path);/读TXT所有行,分行/存在数组中 txte.Text = allLine0.Substring(allLine0.LastIndexOf(":") + 1); txtGA.Text = allLine1.Substring(allLine1.LastIndexOf(":") + 1); txtgzN.Text = allLine2.Substring(allLine2.LastIndexOf("

18、:") + 1); txtToe.Text = allLine3.Substring(allLine3.LastIndexOf(":") + 1); txtMo.Text = allLine4.Substring(allLine4.LastIndexOf(":") + 1); txtT.Text = allLine5.Substring(allLine5.LastIndexOf(":") + 1); txtW.Text = allLine6.Substring(allLine6.LastIndexOf(":&quo

19、t;) + 1); txtRAo.Text = allLine7.Substring(allLine7.LastIndexOf(":") + 1); txtRA.Text = allLine8.Substring(allLine8.LastIndexOf(":") + 1); txtGDi.Text = allLine9.Substring(allLine9.LastIndexOf(":") + 1); txtCuc.Text = allLine10.Substring(allLine10.LastIndexOf(":&qu

20、ot;) + 1); txtCus.Text = allLine11.Substring(allLine11.LastIndexOf(":") + 1); txtCic.Text = allLine12.Substring(allLine12.LastIndexOf(":") + 1); txtCis.Text = allLine13.Substring(allLine13.LastIndexOf(":") + 1); txtCrc.Text = allLine14.Substring(allLine14.LastIndexOf(&q

21、uot;:") + 1); txtCrs.Text = allLine15.Substring(allLine15.LastIndexOf(":") + 1); /把计算结果输出到TXT文档中 private void button2_Click(object sender, EventArgs e) OpenFileDialog fileName = new OpenFileDialog(); fileName.Filter = "记事本|*.txt" if (fileName.ShowDialog() = DialogResult.OK)

22、string path = fileName.FileName.ToString(); String allLine = new String50; allLine0 = label24.Text+lbla.Text; allLine1 = label11.Text + lblno.Text; allLine2 = label12.Text + lbln.Text; allLine3 = label14.Text + lblM.Text;13 allLine4 = label19.Text + lblE.Text; allLine5 = label20.Text + lblf.Text; allLine6 = label21.Text + lblu.Text; allLine7 = label22.Text + lblr.Text; allLine8 = label50.Text + label31.Text + lbls_u.Text+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论