2. 函数 swe_calc_ut() 和 swe_calc() 在调用这两个函数之一或任何Swiss Ephemeris 函数前, 强烈建议调用函数 swe_set_ephe_path(). 即使你想设置星历路径并使用莫希尔星历表, 仍然推荐调用swe_set_ephe_path(NULL), 因为该函数进行重要的初始化. 不这样做, Swiss Ephemeris 也可以工件但结果可能不是100% 的正确. 2.1. 调用参数 swe_calc_ut() 是在Swisseph 版本1.60 中引入并使行星计算更为简便. 关于需要的步骤, 参见章节 获取行星位置的编程步骤. swe_calc_ut() 和 swe_calc() 工作方式完全相同只是swe_calc() 要求历书时 (更准确地说: 力学时 ) 作为参数而 swe_calc_ut() 则要求世界时. 对于占星术的计算, 你可能只需要swe_calc_ut()并且将不必再思考关于世界时和历书时的转换. swe_calc_ut() 和 swe_calc() 计算行星、小行星位置, 月球交点和远地点. 它们定义如下:
int swe_calc_ut ( double tjd_ut, int ipl, int iflag, double* xx, char* serr), 其中 tjd_ut =儒略日, 世界时 //世界时间,格林尼治(平均)时 ipl =星体编号 //星体编号 iflag =一个 32 位整, 型包了含用于指明需要哪种类型的计算的标志位 xx = 6元素双精度数组包含了经度, 纬度, 距离, 经度速度, 纬度速度和距离速度. serr[256] =发生错误时返回错误信息的字符串.
而且 int swe_calc(double tjd_et, int ipl, int iflag, double *xx, char *serr), 相同但 tjd_et = 儒略日, 历书时, 其中tjd_et = tjd_ut + swe_deltat(tjd_ut)
关于这此变量的详细说明将在以后章节中给出.
2.2. 星体( int ipl ) 要告诉 swe_calc() 想计算哪一个天体或要素, 使用一组固定的星体编号. 星体编号在swephexp.h中定义: /* swe_calc() 中的 ipl 参数使用的行星编号*/ #define SE_ECL_NUT -1 #define SE_SUN 0 #define SE_MOON 1 #define SE_MERCURY 2 #define SE_VENUS 3 #define SE_MARS 4 #define SE_JUPITER 5 #define SE_SATURN 6 #define SE_URANUS 7 #define SE_NEPTUNE 8 #define SE_PLUTO 9 #define SE_MEAN_NODE 10 #define SE_TRUE_NODE 11 #define SE_MEAN_APOG 12 #define SE_OSCU_APOG 13 #define SE_EARTH 14 #define SE_CHIRON 15 #define SE_PHOLUS 16 #define SE_CERES 17 #define SE_PALLAS 18 #define SE_JUNO 19 #define SE_VESTA 20 #define SE_INTP_APOG 21 #define SE_INTP_PERG 22
#define SE_NPLANETS 23 #define SE_FICT_OFFSET 40 #define SE_NFICT_ELEM 15 #define SE_AST_OFFSET 10000
/* Hamburger or Uranian "planets" */ #define SE_CUPIDO 40 #define SE_HADES 41 #define SE_ZEUS 42 #define SE_KRONOS 43 #define SE_APOLLON 44 #define SE_ADMETOS 45 #define SE_VULKANUS 46 #define SE_POSEIDON 47
/* other fictitious bodies */ #define SE_ISIS 48 #define SE_NIBIRU 49 #define SE_HARRINGTON 50 #define SE_NEPTUNE_LEVERRIER 51 #define SE_NEPTUNE_ADAMS 52 #define SE_PLUTO_LOWELL 53 #define SE_PLUTO_PICKERING 54
额外的小行星 其它小行星的星体编号大于SE_AST_OFFSET (=10000) 且必须按以下方式构成: ipl = SE_AST_OFFSET + Minor_Planet_Catalogue_number; 例如Eros : ipl = SE_AST_OFFSET + 433
小行星的名称和总目号(catalogue numbers) 可以在文件 seasnam.txt 中找到.
示例如下:
5 Astraea 6 Hebe 7 Iris 8 Flora 9 Metis 10 Hygiea 30 Urania 42 Isis not identical with "Isis-Transpluto" 153 Hilda (has an own asteroid belt at 4 AU) 227 Philosophia 251 Sophia 259 Aletheia 275 Sapientia 279 Thule (asteroid close to 木星) 375 Ursula 433 Eros 763 Cupido different from Witte's Cupido 944 Hidalgo 1181 Lilith (not identical with Dark Moon 'Lilith') 1221 Amor 1387 Kama 1388 Aphrodite 1862 Apollo (different from Witte's Apollon) 3553 Damocles highly eccentric orbit betw. Mars and Uranus 3753 Cruithne ("second moon" of earth) 4341 Poseidon Greek 海王星 (different from Witte's Poseidon) 4464 Vulcano fire god (different from Witte's Vulkanus and intramercurian Vulcan) 5731 Zeus Greek 木星 (different from Witte's Zeus) 7066 Nessus third named Centaur (beween Saturn and 冥王星)
各小行星有两个星历文件, 一个长和一个短:
se09999.se1 小行星编号9999的长星历, 3000 BC – 3000 AD se09999s.se1 小行星编号9999的短星历, 1500 – 2100 AD
较大的文件的大小大约是短星历的10 倍. 如果用户不想1500年前的星历他可以使用短文件. 如果是这样, 只拷贝文件名尾部为”s.se1” 到你的硬盘. Swe_calc() 将尝试打开长文件并在失败后自动使用短文件. 小行星星历在星历目录下的子目录 ast0, ast1, ast2 .. ast9 中搜索, 而且如果没找到则在星历目录本身中查找. 编号为0 – 999 的小行星在目录ast0中, 那些编号1000 – 1999 的小行星在目录 ast1 中查找, 等等. 注意 并非所有小行星 可以在 Swiss Ephemeris 的整个期间内计算.他们中的某些星的轨道对于主行星的扰动是非常敏感的. 例如 CHIRON 星, 因为与土星的接近而不能计算公元 650 以前及公元 4650以后的数据. 在这个时间范围之外 Swiss Ephemeris 返回错误码, 一条错误信息, 以及位置值0. 注意, 用户必须在自己的程序中处理这种情况. 为Jesus 或 Alexander 计算 Chiron transits the Great 将得不到正确结果. 相同的还有 Pholus 星3850 BC, 以及许多其它的小行星, 例如 1862 Apollo. 它在1870 AD 前当它靠近金星很近时变得混乱,. Swiss Ephemeris 不提供几个世纪前的 Apollo 的位置!
注意小行星名称 小行星的名字在文件 seasnam.txt 中列出. 该文件位于星历文件所在目录. 虚构的行星
虚构的行星的星体编号大于或等于40. 用户可以定义他们自己的虚构的行星. 这些行星的轨道参数必须写入文件 seorbel.txt. 函数 swe_calc() 搜索由 swe_set_ephe_path() 设置的星历路径中的文件 seorbel.txt. 如果没有找到轨道参数文件, swe_calc() 使用前面提及的 Uranian planets 和一些其它星体的内置的轨道参数. 虚构的行星的星体编号定义为
ipl = SE_FICT_OFFSET_1 + number_of_elements_set;
例如对于Kronos: ipl = 39 + 4 = 43.
文件seorbel.txt 具有以下结构:
#虚构的行星的轨道参数 # 27 Jan. 2000 # # This file is part of the Swiss Ephemeris, from Version 1.60 on. # # Warning! These planets do not exist! # # The user can add his or her own elements. # 960 is the maximum number of 虚构的行星. # # The elements order is as follows: # 1. epoch of elements (儒略日) # 2. equinox (儒略日 或 "J1900" 或 "B1950" 或 "J2000" 或 “JDATE”) # 3. 平近点角 at epoch # 4. semi-axis # 5. eccentricity # 6. argument of 近日点 (ang. distance of 近日点 from node) # 7. 升交点 # 8. inclination # 9. name of planet # # use '#' for comments # to compute a body with swe_calc(), use 行星编号 # ipl = SE_FICT_OFFSET_1 + number_of_elements_set, # 例如 number of Kronos is ipl = 39 + 4 = 43 # # Witte/Sieggruen planets, refined by James Neely J1900, J1900, 163.7409, 40.99837, 0.00460, 171.4333, 129.8325, 1.0833, Cupido # 1 J1900, J1900, 27.6496, 50.66744, 0.00245, 148.1796, 161.3339, 1.0500, Hades # 2 J1900, J1900, 165.1232, 59.21436, 0.00120, 299.0440, 0.0000, 0.0000, Zeus # 3 J1900, J1900, 169.0193, 64.81960, 0.00305, 208.8801, 0.0000, 0.0000, Kronos # 4 J1900, J1900, 138.0533, 70.29949, 0.00000, 0.0000, 0.0000, 0.0000, Apollon # 5 J1900, J1900, 351.3350, 73.62765, 0.00000, 0.0000, 0.0000, 0.0000, Admetos # 6 J1900, J1900, 55.8983, 77.25568, 0.00000, 0.0000, 0.0000, 0.0000, Vulcanus # 7 J1900, J1900, 165.5163, 83.66907, 0.00000, 0.0000, 0.0000, 0.0000, Poseidon # 8 # # Isis-Transpluto; elements from "Die Sterne" 3/1952, p. 70ff. # Strubell does not give an equinox. 1945 is taken 为了 # reproduce the as best as ASTRON ephemeris. (This is a strange # choice, though.) # The epoch according to Strubell is 1772.76. # 1772 is a leap year! # The fraction is counted from 1 Jan. 1772 2368547.66, 2431456.5, 0.0, 77.775, 0.3, 0.7, 0, 0, Isis-Transpluto # 9 # Nibiru, elements from Christian Woeltge, Hannover 1856113.380954, 1856113.380954, 0.0, 234.8921, 0.981092, 103.966, -44.567, 158.708, Nibiru # 10 # Harrington, elements from Astronomical Journal 96(4), Oct. 1988 2374696.5, J2000, 0.0, 101.2, 0.411, 208.5, 275.4, 32.4, Harrington # 11 # according to W.G. Hoyt, "Planets X and 冥王星", Tucson 1980, p. 63 2395662.5, 2395662.5, 34.05, 36.15, 0.10761, 284.75, 0, 0, Leverrier (海王星) # 12 2395662.5, 2395662.5, 24.28, 37.25, 0.12062, 299.11, 0, 0, Adams (海王星) # 13 2425977.5, 2425977.5, 281, 43.0, 0.202, 204.9, 0, 0, Lowell (冥王星) # 14 2425977.5, 2425977.5, 48.95, 55.1, 0.31, 280.1, 100, 15, Pickering (冥王星) # 15 J1900,JDATE, 252.8987988 + 707550.7341 * T, 0.13744, 0.019, 322.212069+1670.056*T, 47.787931-1670.056*T, 7.5, Vulcan # 16 # Selena/White Moon J2000,JDATE, 242.2205555, 0.05279142865925, 0.0, 0.0, 0.0, 0.0, Selena/White Moon, geo # 17
所有轨道参数除了时期(epoch)和分点(equinoxes)可能还有T项, 其中 T = (tjd – epoch) / 36525. (参见, 如, Vulcan, 倒数第二个元素集(不是“天王星”vulcanus 而是水星内假想行星Vulcan).) ”T * T”, ”T2”, ”T3” 也是允许的. 分点既可以是儒略日或”J1900” 或 ”B1950” 或 ”J2000” 或, 如果要求的是分点的日期, 可以是”JDATE”. 如果你使用T 项, 注意的岁差必须考虑JDate, 而它已经被固定分点忽略.
平近点角不需要T 项, 换言之对于星体的速度, 因为我们的程序可以从半轴和重力计算它. 但是, 平近点角 T 项必须添加到 Vulcan 因为它的速度与物理定律不一致. 在此情况下, 程序使用元素中给出的速度且并不在内部计算它.
从版本1.62 开始, 程序也接受在地球上空移动的虚拟星体的轨道参数. 作为例子, 研究上面的 seorbel.txt 摘要中的最后元素集. 在星体名称后, 添加了”, geo”.
倾角和章动
一个特殊的星体编号 SE_ECL_NUT 用于计算黄赤交角和章动. 当然章动已经由 swe_calc() 内部添加到星体坐标, 但在有时候我们需要得到它的单独的值.
iflgret = swe_calc(tjd_et, SE_ECL_NUT, 0, x, serr);
x 通常是具有六个成员的双精度数组. 它们将被填充如下:
x[0] = 真黄赤交角 (包括章动) x[1] = 平黄赤交角 x[2] = 黄经章动 x[3] = 黄赤交角章动 x[4] = x[5] = 0
|