本人需要做一个卫星轨道预报软件,当中需要用opengl做这样一些工作:
三维视图(卫星沿轨道围绕地球飞行),
二维卫星轨迹视图(墨卡托投影视图)。
关于这方面的软件有不少,可是却没有源代码可以研究,很难入手,特别对于我这种刚入门的人来说。
   不知道哪位热心人有这方面的资料,望能告知,感激不尽
    邮件:[email protected]   ,   [email protected]  

解决方案 »

  1.   

    炮炮你好,又见到你了,感觉真好。投影的定义具体我还不太清楚,只知道它的形式是那样的:地球表面被展开成一个矩形图,再当中需要画卫星的星下线轨迹。类似的软件可以在这个网址下载:http://www.movingsatellites.com/e_gps.html你下载运行看了就知道了。期待你的回复。
      

  2.   

    基本方法:
    卫星的轨迹函数 sa(t) 是一个矢量函数,通过这个矢量函数可以求出星下轨迹线函数
    sa1(t) 也是一个矢量函数
    sa1(t) = [sa1x(t), sa1y(t), sa1z(t)]然后根据直角坐标系和球坐标系的关系
    [
    x = R*cos(u)*cos(v);
    y = R*sin(u)*cos(v);
    z = R*sin(v);
    ]求出球面上的参数曲线
    sa2(t) = [sa2u(t), sa2v(t)] 注意这是一个二维矢量函数。得到这个参数曲线之后,令
    x = sa2u(t)
    y = sa2v(t)
    就可以画出 xy 坐标系中的展开后的星下轨迹线了。
      

  3.   

    补充 直角坐标系和球坐标系的关系:[
    x = R*cos(u)*cos(v); (1)
    y = R*sin(u)*cos(v); (2)
    z = R*sin(v); (3)
    ](1)^2 + (3)^2  得到
    x^2/(R^2*cos(u)^2) + z^2/R^2 = 1   (4)同样
    (2)^2 + (3)^2 得到
    y^2/(R^2*sin(u)^2) + z^2/R^2 = 1   (5)从 (4) 得到
    x^2 = (1-z^2/R^2)*R^2*cos(u)^2   (6)
    因为 z<=R 所以
    (1-z^2/R^2) >= 0
    又因为 x 和 cos(u) 必定同号,所以 从 (6) 得到
    x = R*cos(u)*sqrt(1-z^2/R^2);
    从这里面可以解出 cos(u)同样的方法可以解出 sin(u)有了 cos(u) 和 sin(u) 的值,就可以算出 u 了
    u = atan2(cos(u), sin(u))
    atan2() 函数是标准库函数。根据 3 可以算出 v。于是 u, v 都有了。
      

  4.   

    alphapaopao(炮炮) :
    你真行啊!
    我现在有了卫星运行轨迹上的各点的三维坐标(x,y,z)
    并且建了一个卫星的三维模型,可如何才能将卫星模型放到卫星运行
    的轨迹点上,并且让卫星的轴线在轨迹线上啊!而且还要保持卫星的一个
    扫描面永远对者地球,而不出现卫星在轨道上翻转呢?
      

  5.   

    定义地球所在坐标系为世界坐标系,卫星所在坐标系为世界坐标系的子坐标系。
    子坐标系中
    1,z轴为椭圆轨道面法向量。
    2,x轴为 pntEarth - pntSa 并且单位化。 pntEarth 是地球球心,pntSa 是卫星中心
    3,y 轴自然是 z 叉乘 x
    4,坐标架的原点是 pntSa绘制的时候,保证卫星处于这个坐标架就能保证卫星的某一个面对准地球。如果还有不明白的地方可以再讨论。
      

  6.   

    alphapaopao(炮炮) :你好!
    看来你真是高手啊!给我讲的这么详细,我还是不太明白,我是不是太笨啊?就是就是。
    条件如下:
    我已知卫星轨道上的各点坐标(x,y,z)与该点的(经度,纬度)
    用如下方法变换坐标总是不对啊!卫星的轴线与轨道的方向总是有
    夹角,并在两极地区转动方向(就是从赤道向极地上升时,卫星的头是
    朝上的向极地运动,可是到了极地时就转为尾部朝前了)
    另外:我的卫星模型的轴线是Y轴正方向。
    glPushMatrix();
    glTranslatef(X1,Y1,Z1);//将卫星坐标换到X1,Y1,Z1点
    //为了让卫星的一个扫描面永远对着地球,
    //我将卫星绕Y轴转所在轨道点的经度,再将卫星绕X轴转该点的负纬度
    glRotatef(Longitude,0.0f,1.0f,0.0f);//经度
    glRotatef(-Latitude,1.0f,0.0f,0.0f);//纬度
    glCallList(Satellite1);//显示卫星
    glPopMatrix();我有图的贴子在这个地方
    http://bbs.chinagamedev.net/showthread.php?s=&threadid=4993
      

  7.   

    To: alphapaopao(炮炮) :你好!我另开一贴在这,还是卫星轨道的问题,求解答
    http://expert.csdn.net/Expert/topic/2643/2643860.xml?temp=.3680536
      

  8.   

    得补一下卫星轨道的数学方法。
    1. 地心系坐标系统
    2. 中国使用的地心系及参数 (五四系、地心一号、地心二号),地球是一个椭球体,每个国家因为平均海拔的的不同,计算系数是不一样的。资料可能不太好拿到,大多的军方用的或是天文台才有. 要是用球形坐标系,也可以不用.
    3. 卫星轨道平面(卫星加一个地球自转的角速度,轨迹是一个平面)及星下点(是一个二维坐标,用经纬度直接转换在高度为0(海平面)上的坐标就是了)
    4. 各种三维坐标系间的转换及反转换. 这是图形学课程里的东东.
    5. 墨卡托投影视图与星下点的计算类似.极点会变成一条线.但卫星不可能通过极点的.
    6. 经度\纬度\海拔高度 与 地心系间的转换.这个是整个计算的基础.
    7. 有卫星点的地心系坐标, 有轨道平面, 应该可以计算切线的方向. 卫星是不是还得做一次投影变换? 
    8. 源代码: 到网上找一个 叫 sattrack的软件, 可能改名字了, 我记得版本1.10源代码是公开的,六七年前用过,这个代码是C写的,很好读.但计算公式效率不高.