swiss Ephemerisでよく使用する関数、というか基本これだけあれば占星術ソフトは作れるはず。

その他の関数はこちらから

swe_set_ephe_path

天文歴ファイルのパスを指定します。これを入れないとプログラムを起動したディレクトリを探索します。

    swe_set_ephe_path("./ephe");


semo_: moon(月の天文歴ファイル)
sepl_: planets(天体の天文歴ファイル)
seas_: asteroids(小惑星の天文歴ファイル、Chironとかの度数を出すのに必要)

ここが言語によってかなり違う部分。ここ以外はほとんど同じ。

swe_calc

エフェメリス時刻をもとに天体の位置を計算します。

    swe_calc(double tjd_et,
    int32 ipl,
    int32 iflag,
    double *xx,
    char *serr))

tjd_etはエフェメリス時刻、iplは天体ID、iflagはフラグとなり、xxが参照型ポインタ(longitude, latitude, distance, long.speed, lat.speed, dist.speed)となっていてserrがエラー戻り値のポインタ。

  • SEFLG_SWIEPH: swiss Ephemerisを使用
  • SEFLG_SPEED: 結果に速度も含める(逆行判定で使う)
  • SEFLG_HELCTR: ヘリオセントリックで計算
  • SEFLG_SIDEREAL: サイデリアル方式で計算

flag = SEFLG_SWIEPH|SEFLG_SPEED
のように使用。その他は公式ドキュメントを参照。

swe_calc_ut

ユリウス時刻をもとに天体の位置を計算します。それ以外はswe_calcと一緒。

swe_houses

ハウスの位置を計算します。戻り値は13個のarrayで、[0]は0.000が入るので注意。

    int swe_houses(
        double tjd_ut,      /* Julian day number, UT */
        double geolat,      /* geographic latitude, in degrees */
        double geolon,      /* geographic longitude, in degrees,
                        * eastern longitude is positive,
                        * western longitude is negative,
                        * northern latitude is positive,
                        * southern latitude is negative */
        int hsys,           /* house method, one of the letters PKRCAV */
        double* cusps,      /* array for 13 doubles */
        double* ascmc);     /* array for 10 doubles */

基本的に先頭4つを渡して戻り値cuspsを使えばいいです。

hsysは以下のような感じ。

  • C: Campanus
  • K: Koch
  • M: Morinus
  • O: Porphyrius
  • P: Placidus
  • R: Regiomontanus

ascmcにはこういう値が返るけど、ASCとMCはcuspsにも入っているから使わなくて良い。

    ascmc[0] = Ascendant
    ascmc[1] = MC
    ascmc[2] = ARMC
    ascmc[3] = Vertex
    ascmc[4] = "equatorial ascendant"
    ascmc[5] = "co-ascendant" (Walter Koch)
    ascmc[6] = "co-ascendant" (Michael Munkasey)
    ascmc[7] = "polar ascendant" (M. Munkasey)

swe_utc_time_zone

タイムゾーンを設定します。参照型引数によって戻り値が返却されます。

    swe_utc_time_zone(year, month, day, hour, minute, second, timezone, &utc_year, &utc_month, &utc_day, &utc_hour, &utc_minute, &utc_second);

swe_utc_to_jd

utcの時刻からユリウス時刻を求めます。

    swe_utc_to_jd(utc_year, utc_month, utc_day, utc_hour, utc_minute, utc_second, 1, dret, serr);

swe_close

ファイルポインタとかの開放を行います。プログラム終了時にはちゃんと入れましょう。

swe_set_sid_mode

インド占星術のサイデリアルにおけるアヤナムシャを設定します。

swe_get_ayanamsa_ex_ut

サイデリアルモードのユリウス時刻を取得します。

その他日食を求める関数とかもありますが使ったこと無い。