中华农历论坛知识讨论区历法知识 → DE405/406星历表算法


  共有51803人关注过本帖树形打印

主题:DE405/406星历表算法

帅哥哟,离线,有人找我吗?
nostalgica
  11楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:2 积分:212 威望:0 精华:0 注册:2009/6/25 0:48:00
  发帖心情 Post By:2009/8/26 12:05:00

你好许老师!getCoordOne这个函数有两个问题请教您。
void getCoordOne(int a, int bCenter, double* r) { //在pv中提取一个星体的坐标
  int i,j;
  double *pa=pv[a], *pb=pv[bCenter];
  for (i=0; i<6; i++) {
    if(a==13||a==14) r[i] = pa[i]; // 提取章动(13)和天平动(14)
    else r[i] = pa[i]-pb[i];
  }
  if(a==14) r[4]=r[5]=0;
}
一是15被定义成月球的地心坐标,这里做坐标平移时并没有把15排除掉。
二是14是月球天平动,包括三个欧拉角及变化率,不知为何把14的后两个数置0;而13是章动,包括黄经与交角章动及变化率,应为4个数。
还有想请教:计算中首先算的是SSB下的星体位置,SSB是不是就是和J2000平行的,要得到J2000下的值是否还要通过所谓ICRF进行转换。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  12楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/8/29 20:12:00

可能是我弄错了。也许应改为if(a==13) r[4]=r[5]=0;很久没有使用DE星表了,当时编写程序的过程忘了许多。

不过DE406中没有章动和天平动。所以我上次写的程序在DE406中是没有问题的,实际上我利用testpro.406验证过。

 

你说到:“SSB是不是就是和J2000平行的”,我不太明白您的意思。

 

确定一个坐标系,须知道三个坐标系的方向及坐标原点。SSB指的是坐标原点建在太阳系质心。J2000坐标系,指的是坐标轴的方向,它由历元J2000的黄道、赤道确定。所以SSB和J2000坐标之前不能比较。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
nostalgica
  13楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:2 积分:212 威望:0 精华:0 注册:2009/6/25 0:48:00
  发帖心情 Post By:2009/9/3 13:00:00

感谢您的答复,看来不同的版本程序还是要稍作改动的。不知道DE200,或者更新的DE410是否也通用。
第二个我的意思是问DE405/6所求的坐标是在ICRF下的描述吗。SSB是指太阳系质心坐标系,是在卫星轨道控制领域里常用的一个标记。ICRF是ICRS(International Earth Rotation and Reference Systems Service)定义的坐标系。J2000.0自然很常用了。这些坐标系的转动关系又是如何呢。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  14楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/9/3 20:05:00

ICRF不是基于黄道赤道定义的坐标系,它是利用遥远的星系定义的坐标系。可以认为它是一个无旋的坐标系,即随时间推移,坐标轴的方向可以认为没有变化。
ICRF与J2000赤道坐标系还是很接近的,实际上它于FK5更接近。

在直角坐标系中,ICRF旋转到J2000坐标系,可以通过旋转矩阵来解决问题,不过我没有找到这个矩阵,也许使用FK5的那个就可以了。我有一个球面旋转使用的参数,利用它也可以得到直角坐标旋转用的矩阵。通过这个矩阵旋转后,与NASA星历表比对,也没有明显误差,误差大约在毫角秒级以下。

旋转方法参考如下:

function X406to2000(a){
 var J=new Array(
   1.0000000000000,-0.0000000742925,0.0000000734750,
   0.0000000389354, 0.9174821361227,0.3977769851257,
  -0.0000000969638,-0.3977769851257,0.9174821361227);
 var b=new Array();
 b[0] = a[0]*J[0] + a[1]*J[1] + a[2]*J[2];
 b[1] = a[0]*J[3] + a[1]*J[4] + a[2]*J[5];
 b[2] = a[0]*J[6] + a[1]*J[7] + a[2]*J[8];
 return b;
}
//如果不使用X406to2000,可在球面坐标中参考以下3行
//b[0]+=0.05028/rad;
//b=llrConv(b,-(23*3600+26*60+21.4096)/rad);
//b[0]-=0.0381/rad;


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
missilelyj
  15楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:1 积分:211 威望:0 精华:0 注册:2009/9/28 12:28:00
  发帖心情 Post By:2010/3/25 13:23:00

谢谢楼主的帖子!有参考价值。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
shdw
  16楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:13 积分:447 威望:0 精华:0 注册:2010/2/3 12:32:00
  发帖心情 Post By:2010/4/14 15:20:00

以下是引用ymy111在2009-2-9 11:04:00的发言:

据我所知  现在大部分软件 都是调用的瑞士星历表。从我所引用那片文章看  现在有学校向学生讲授瑞士星历表的方法
我这里有一个用c语言写的调用瑞士星历表的占星软件的源码,许老师需要的话,可寄给你
我对c语言非常不熟,看不懂,所以希望许老师能写一个基于瑞士星历表的实用软件



严重同意.......谢谢。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
hongbei
  17楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:1 积分:201 威望:0 精华:0 注册:2010/4/18 14:13:00
  发帖心情 Post By:2010/4/18 14:44:00

许老师,我在VC6.0中实现了您给的星历算法,可程序在链接过程中总出错:
Linking...
sxwnl_eph.obj : error LNK2005: "void __cdecl d2e(char *,int)" (?d2e@@YAXPADH@Z) already defined in EphemUtil.obj
sxwnl_eph.obj : error LNK2005: "void __cdecl gotoNextGroup(char *,struct _iobuf *)" (?gotoNextGroup@@YAXPADPAU_iobuf@@@Z) already defined in EphemUtil.obj.......

不知道是什么原因,您要是有时间的话帮我看一下吧!
谢谢了~

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
shdw
  18楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:13 积分:447 威望:0 精华:0 注册:2010/2/3 12:32:00
  发帖心情 Post By:2010/5/5 15:15:00

希望许老师能写一个基于瑞士星历表的实用软件

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
春光
  19楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:917 积分:7577 威望:10 精华:1 注册:2005/3/17 11:37:00
  发帖心情 Post By:2010/7/24 15:05:00

精品好贴,向上顶。同时再次谢谢许兄的奉献和劳动。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
总数 19 上一页 1 2

返回版面帖子列表

DE405/406星历表算法








签名