Advertisement

【测绘程序设计】——计算卫星位置

阅读量:

本文介绍了根据广播星历计算卫星瞬时地固系位置的C#版计算程序及其应用方法,并详细分析了程序的代码结构及运行流程。软件包括数据输入界面、计算结果展示模块以及完整的工程源码(包含实验数据),用户可通过运行软件直接获得计算结果并进行验证分析。文章还提供了详细的代码结构说明和使用示例,并附有完整的源码下载链接供用户参考和技术实现。(注:原文中缺少具体实验数据和完整源码截图)

本文介绍了广播星历用于计算卫星瞬时地固系位置的程序(C#版本)。其中,在该系统中将瞬时地球坐标系坐标的极移改正应用后即可获得协议地球坐标系坐标的值。其中包含完整的工程文件(可以直接运行),以及用于演示的操作示例。


目录

  • Part.Ⅰ 使用示例

  • Part.Ⅱ 代码分析

    • Chap.Ⅰ 数据结构
    • Chap.Ⅱ 计算位置
  • Part.Ⅲ 源码下载

Part.Ⅰ 使用示例

(一)应用标记的操作界面展示了...

软件运行界面

(二)计算结果

计算结果

Part.Ⅱ 代码分析

Chap.Ⅰ 数据结构

复制代码
    public class Point
    {
    public double[] X = new double[3];//坐标
    public double t;//发射时刻
    public double delta_t;//相对论钟差
    }
    
    public struct Point_Result
    {
    public double X;
    public double Y;
    public double Z;
    }

Chap.Ⅱ 计算位置

复制代码
    public class Perturbation
    {
    public class PlaneLocation//内嵌类
    {
        public static double x;
        public static double y;
    }
    
    public double delta_n;
    public double n0;
    public double n;
    public double E;
    public double M0;
    public double M;
    public double e;
    public double f;
    public double t, t0e, Omega_0e, L;
    public double u_prime, r_prime, i0;
    public double omega, Omega, omega_e = 7.292115E-5;
    public double Cuc, Cus, Crc, Crs, Cic, Cis, di, dOmega;
    public double u, r, i;
    public double sqrtA;
    public double GM = 3.986005e14;
    public double deltaU, deltaR, deltaI;
    
    public void f_Calculate()
    {
        f = Math.Atan(Math.Sqrt(1 - e * e) * Math.Sin(E) / (Math.Cos(E) - e));
    }
    public void n_Calculate()
    {
        n = n0 + delta_n;
    }
    public void E_Calculate()
    {
        E = M;
        for (int i = 0; ; i++)
        {
            double Ep = E;
            E = E - (M + e * Math.Sin(E) - E) / (e * Math.Cos(E) - 1);
            if (Ep - E < 10e-10 || E - Ep < 10e-10)  //&&
            break;
        }
    }
    public void M_calculate()
    {
        M = M0 + n * (t - t0e);
    }
    public void u_prime_calculate()
    {
        u_prime = omega + f;
    }
    public void pert_calculate()//计算摄动改正项并对u i r进行摄动改正
    {
        deltaU = Cuc * Math.Cos(2 * u_prime) + Cus * Math.Sin(2 * u_prime);
        deltaR = Crc * Math.Cos(2 * u_prime) + Crs * Math.Sin(2 * u_prime);
        deltaI = Cic * Math.Cos(2 * u_prime) + Cis * Math.Sin(2 * u_prime);
        u = u_prime + deltaU;
        i = i0 + deltaI + di * (t - t0e);
        r = sqrtA * sqrtA * (1 - e * Math.Cos(E)) + deltaR;
    }
    public void pLocation_calculte()
    {
        PlaneLocation.x = r * Math.Cos(u);
        PlaneLocation.y = r * Math.Sin(u);
    }
    public void L_calculate()
    {
        L = Omega + dOmega * (t - t0e) - omega_e * t;
    }
    public Point_Result Initial_Location()
    {
        Point_Result PR = new Point_Result();
        PR.X = PlaneLocation.x * Math.Cos(L) - PlaneLocation.y * Math.Cos(i) * Math.Sin(L);
        PR.Y = PlaneLocation.x * Math.Sin(L) + PlaneLocation.y * Math.Cos(i) * Math.Cos(L);
        PR.Z = PlaneLocation.y * Math.Sin(i);
        return PR;
    }
    }

Part.Ⅲ 源码下载

测绘程序设计

测绘程序设计

测绘程序设计

测绘程序设计

测绘程序设计

测绘程序设计

源代码下载

全部评论 (0)

还没有任何评论哟~