中华农历论坛知识讨论区历法知识 → Swiss Ephemeris 应用程序编程接口(1)


  共有36220人关注过本帖平板打印

主题:Swiss Ephemeris 应用程序编程接口(1)

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


加好友 发短信
等级:论坛游民 帖子:56 积分:682 威望:0 精华:1 注册:2010/8/12 21:56:00
  发帖心情 Post By:2016/9/26 11:22:00


8. Delta T 相关函数
/* delta t 来自儒略日数 */
double swe_deltat_ex(double tjd, int32 ephe_flag, char *serr);
/* delta t 来自儒略日数 */
double swe_deltat(double tjd);
/* 得到用于 swe_deltat() 的潮汐加速度 */
double swe_get_tid_acc(void);
/* 设置用于 swe_deltat() 的潮汐加速度 */
void swe_set_tid_acc(double t_acc);
/* 设置由 swe_deltat() 返回的固定 Delta T 值 */
void swe_set_delta_t_userdef (double t_acc);

你从出生日期计算的儒略日数, 将是世界时 (UT,  以前的 GMT) 并可用于计算恒星时间和宫位. 然而, 对于行星和其它因素, 你必须转换 UT 到 历书时 (ET):
8.1 swe_deltat_ex()
tjde = tjd + swe_deltat_ex(tjd, ephe_flag, serr); 
         where tjd = 儒略日 in UT, tjde = in ET
ephe_flag = 星历标志 (SEFLG_SWIEPH, SEFLG_JPLEPH, SEFLG_MOSEPH 其中之一)
serr = 警告信息的串指针.

如果函数在调用 swe_set_ephe_path() 之前用 SEFLG_SWIEPH 标志调用, 或在调用 swe_set_jpl_file() 之前用 SEFLG_JPLEPH 标志调用, 则函数返回一个警告.

UT 中星历的计算取决于 Delta T, 它取决于月亮的潮汐加速度在星历表内的值. 函数 swe_deltat_ex() 可以提供来源于星历的 Delta T 值并因此比老的函数 swe_deltat() 更好, 老的函数用不确定的猜测以确定使用的是什么星历. 因此它会作出一个警告:

我们不建议混合使用新旧星历文件 sepl*.se1, semo*.se1, seas*.se1, 因为旧的文件是基于 JPL 星历 DE406, 新的则是基于 DE431, 而且两个星历具有不同的月球潮汐加速度. 混合使用新旧星历文件可能导致不一致的星历表输出. 与新的一起使用旧的小行星文件se99999.se1, 是可以忍受的.

8.2 swe_deltat()
tjde = tjd + swe_deltat(tjd); 其中 tjd = 儒略日 in UT, tjde = in ET

此函数仅在以下情况下是安全的
- 如果你的程序总是使用相同的星历标志
- 如果你的程序总是使用相同的星历文件(使用 SEFLG_SWIEPH 和 SEFLG_MOSEPH)
- 如果你第一次调用swe_set_ephe_path() (使用 SEFLG_SWIEPH) 和 swe_set_jpl_file() (使用 SEFLG_JPLEPH)

(另外,如果你第一次用你想要的潮汐加速度来调用 swe_set_tid_acc(),这是安全的. 然而, 请不要使用此函数,非除你真的知道你在做什么.)

为最佳控制返回的值, 使用函数 swe_deltat_ex() 代替 (参见上面的8.1).

UT 中星历的计算取决于 Delta T, 它取决于月亮的潮汐加速度在星历表内的值. 在默认模式下, 函数 swe_deltat() 自动尝试查找要求的值. 不过它会作出两次警告:

1. 我们不建议混合使用新旧星历文件 sepl*.se1, semo*.se1, seas*.se1, 因为旧的文件是基于 JPL 星历 DE406, 新的则是基于 DE431, 而且两个星历具有不同的月球潮汐加速度. 混合使用新旧星历文件可能导致不一致的星历表输出. 与新的一起使用旧的小行星文件se99999.se1, 是可以忍受的.

2. 函数 swe_deltat() 使用默认的潮汐加速度值 (DE431 的). 然而, 在调用了一些老的星历后, 如莫希尔星历, DE200, 或 DE406, swe_deltat() 可能提供稍微不同的值.

在这两点相关的麻烦的情况下, 我们建议
- 要么使用函数 swe_deltat_ex(),
- 要么用函数 swe_set_tid_acc() 和 swe_get_tid_acc() 来控制潮汐加速度的值.

8.3 swe_set_tid_acc(), swe_get_tid_acc()
Swiss Ephemeris 版本直到1.80, 如果使用了像 DE200 或 DE421这样的非标准的星历,此函数总是被使用.
从 Swiss Ephemeris 版本 2.00 起, 通常不再需要此函数了, 因为值是根据选择或可用的星历文件而自动设定. 但是, 在某些 “8.1 swe_deltat()” 节中描述的情况下, 用户可能想要自己控制潮汐加速度.  

要找出当前使用的潮汐加速度的值, 调用函数
acceleration = swe_get_tidacc();

为了设置一个不同的值, 使用函数
swe_set_tid_acc(acceleration);  

acceleration 可以具有的值在文件 swephexp.h 中列出(例如 SE_TIDAL_200, 等.)

一但调用了函数 swe_set_tid_acc(), 潮汐加速度的自动设置就被锁定. 为了再次解锁它, 调用
swe_set_tid_acc(SE_TIDAL_AUTOMATIC);  

8.4. swe_set_delta_t_userdef()
此函数允许用户设置一个固定的,将由 swe_deltat() 或 swe_deltat_ex() 返回的 Delta T 值.
相同的 Delta T 值然后将被使用于 swe_calc_ut(), 食函数, 偕函数, 以及所有要求输入时间为 UT 的函数.
为了返回一个自动的 Delta T, 用以下值调用此函数:
swe_set_delta_t_userdef(SE_DELTAT_AUTOMATIC);  

8.4. Delta T 的未将来更新和文件 swe_deltat.txt
Delta T 未来几年的值只能估计. 严格的说, 瑞士星历表必须每年在过去一年的新 Delta T 值由 IERS 公布后更新. 我们将尽我们所能,希望瑞士星历每年更新. 但是, 如果用户不想等待我们的更新或不想下载一个新版本的瑞士星历表, 他可以在位于瑞士星历表路径中的文件 swe_deltat.txt 中添加新的 Delta T 值.
# 该文件允许生成新的、Swiss Ephemeris 知道的 Delta T.
# 注意, 这些值覆盖内部的 Swiss Ephemeris 的 Delta T
# 格式: 年和秒(十进制数)
2003 64.47
2004 65.80
2005 66.00
2006 67.00
2007 68.00
2008 68.00
2009 69.00


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

返回版面帖子列表

Swiss Ephemeris 应用程序编程接口(1)








签名