xjw01老师您好!
我想请教有关您写的程序 DE405/406星历表算法 其中的2个问题, 如果您有时间可否百忙指点一二, 感谢感谢!
1. 在调试您的程序的时候, 发现:
比如在计算水星轨道的时候 double testjd=2444208.55 然后 cd.getCoordOne(DE_mercury, DE_SSBARY, r2); 这时候发现
1 1018 0.244420850000000000D+07 0.244424050000000000D+07 -0.399530505986556709D+08 -0.128233975334908292D+08 0.120336360588081973D+07 0.250943620144140441D+05 -0.531482357268504802D+04 0.249470403150736502D+03 0.560640239484045910D+01 -0.173195792463098552D+01 0.109235362514551099D+00 0.108598532966162008D-02 -0.762930481634479249D-03 0.588936556536435332D-04 -0.147038968266065450D-06
只用了 -0.399530505986556709D+08 这一个, 后面的-0.128233975334908292D+08 0.120336360588081973D+07 ....... 根本不需要用到.
我想请教, 究竟是我调试出错呢还是 计算水星轨道的xyz坐标根本用不到后面这些-0.128233975334908292D+08 0.120336360588081973D+07? 究竟第4个开始的数据 -0.128233975334908292D+08 是什么呢?
第二个问题就是:
在 int DE_coord::calc(double jd, int center) 这个函数中的最后有这么一段我有点不明白:
// 如果必要,以下将太阳系质心坐标改为其它中心坐标(如日心或地心) if (center!=DE_SSBARY) { for (i=0; i<13; i++) { if="if" (i == center) i++; // 中心天体跳过 if="if" (i >= 13) continue; for (j=0; j<6; j++) pv[i][j] -= pv[center][j]; } for(i=0;i<6;i++) pv[center][i] = 0; // 中心天体位置及速度置0 }
请问 如果 center 不等于 DE_SSBARY , 那么这最后一段执行下去究竟得到的是什么? 是地心的坐标吗? 因为在debugPro()过程中您是这么使用的:
cd.getCoordOne(DE_sun, DE_earth, r1); //取太阳地心坐标 cd.getCoordOne(DE_venus, DE_earth, r2); //取金星地心坐标
因为 const DE_earth = 2; const DE_SSBARY = 11; //太阳系质心
所以这段程序的意思就是说, 如果center 不等于 DE_SSBARY, 那么就继续执行, 不管center等于2还是其他. 所以我实在有点理会不了, 是否就是指地心坐标呢?
最后有个请求, xjw01老师可否完善您的代码, 在最后加上日心坐标呢?
致谢!
|