惑星位置と星座

指定日の太陽系惑星位置の取得が行えます。
また、その位置がどの星座であるかを判定できます。

ajd4jp.orreryパッケージの機能に限っては、別途、惑星位置計算のためのデータファイル(DEファイル)が必要です。
まず、そのディレクトリ(フォルダ)へのパス(絶対パスまたは相対パス)を指定する必要があります。
また、この初期化を行うと、ajd4jp.Equinox クラスの演算は、このライブラリ経由に切り替わります。
Webアプリケーションでの利用のような場合、アプリケーション初期化時に1回だけ呼んで下さい。

import ajd4jp.orrery.*;

public class Test {
    public static void main(String[] argv) throws Exception {
        // DEファイル読み込み
        // 配置したディレクトリ(フォルダ)名をフルパスまたは相対パスで指定します。
        Ephemeris.init("/home/hoge/data/DE421");
    }
}

ここで指定するDEファイルはこちらから別途ダウンロードして下さい。次のものを準備しています。

  • DE421
    ファイルサイズは小さめ(それでも17MBありますが)ですが、計算可能日の範囲が
    1899/12/04 ~ 2050/02/03
    となっており、実用上、問題のない範囲です。
  • DE422
    ファイルサイズが非常に巨大なのですが、計算可能日の範囲が
    -3001/12/07 ~ 3000/03/03
    となっており、過去から未来にかけて広い範囲をカバーします。

ZIP圧縮されていますのでそれを展開し任意の場所に置き、上記 Ephemeris.init メソッド引数にてその場所を指定して下さい。

以下のように惑星位置を得ることが出来ます。 ETDは、ajd4jp.orreryパッケージのクラス群で使用する、日付を表すクラスです。

import ajd4jp.*;
import ajd4jp.orrery.*;

public class Test {
    public static void main(String[] argv) throws Exception {
        Ephemeris.init("DE421");
        ETD etd = new ETD(new AJD( 2012, 1, 1, 15, 0, 0));
        for(Planet p: Planet.values()) {
            // 地球以外の星を表示
            if (p == Planet.EARTH) { continue; }
            if (!p.isBody()) { continue; }

            // 太陽を原点としたXYZ座標
            Dim3    d = Dim3.plot(etd, p, Planet.SUN);
            // 黄道座標
            Pole    ec = Pole.plot(etd, p, Pole.Plane.ECLIPTIC);
            // 赤道座標
            Pole    eq = Pole.plot(etd, p, Pole.Plane.EQUATOR);
            System.out.println(p.getJpName());
            System.out.println("\t直交\t" + d.get( Dim3.Unit.AU ).toString());
            System.out.println("\t黄道\t" + ec.get( Angle.Unit.SHIFT_DEGREE60, Angle.Unit.DEGREE60).toString() );
            System.out.println("\t赤道\t" + eq.get( Angle.Unit.SHIFT_DEGREE60, Angle.Unit.HOUR).toString() );
            System.out.println();
        }
    }
}
出力例
太陽
        直交    (0, 0, 0)
        黄道    Lat:0°0′0″.90406170933028699842684387 / Lon:280°13′8″.0769538987005608673132076068
        赤道    Lat:-23°2′35″.4839002793803809205159467696 / Lon:18:44:27.79057120688573037301505863056

水星
        直交    (-0.377441962008280445912636501232, -0.190939983120338656487592424746, -0.062863562964992695952314546136)
        黄道    Lat:0°52′56″.5891782321222227874422227908 / Lon:260°10′41″.7285511522538435608447303824
        赤道    Lat:-22°11′35″.9324992685858884490600616912 / Lon:17:17:32.37466601551155563968651464648

金星
        直交    (0.724075710547454881731168539819, 0.05284342093711994324561127586, -0.022043775374259564455159313179)
        黄道    Lat:-1°49′51″.0441341290515273631094346288 / Lon:314°8′18″.9137939961377893620375230604
        赤道    Lat:-18°20′13″.547567597723383269395205222 / Lon:21:8:38.79794069962716550871481134424

月
        直交    (-0.168895458529133969848186863122, 0.888697544152553054837862031284, 0.385505472335443509140748443137)
        黄道    Lat:4°42′43″.3125488981258854797586536936 / Lon:10°6′10″.5364812855556034854960298256
        赤道    Lat:8°19′54″.347414364155054133878002896 / Lon:0:29:40.08401562290297344754616036768

火星
        直交    (-1.191787957851068782897448070812, 1.03214815594369551537313328079, 0.505605878091749869807839229795)
        黄道    Lat:2°56′53″.1308558641681355324659235772 / Lon:170°10′30″.0945350256178542165388376724
        赤道    Lat:6°36′6″.3859391873234830869043882464 / Lon:11:28:32.8801139998572230001924397548

木星
        直交    (3.754601208664889510298738921807, 3.028932925853202369946856930876, 1.206874400044795741349938227239)
        黄道    Lat:-1°13′41″.3775480473469016416418363716 / Lon:30°26′5″.7845902399208884057840539936
        赤道    Lat:10°28′21″.5811719083737590886280761636 / Lon:1:55:3.34783437978938703758719669224

土星
        直交    (-8.939803600906378362834321376549, -3.580992588949431693762191005684, -1.094100498481247473739976112839)
        黄道    Lat:2°25′17″.7094949690584652777556206232 / Lon:208°18′31″.1708368015831285565991500232
        赤道    Lat:-8°36′30″.4373554583791378362998079384 / Lon:13:48:41.21166218780359989339793758456

天王星
        直交    (20.038282630373539781904417154001, 1.209277194637284471312958066484, 0.24625541518713826614268066785)
        黄道    Lat:-0°43′22″.2647321064619119997724700756 / Lon:0°51′1″.6810153951604863551328428372
        赤道    Lat:-0°19′29″.9122250332374717691075314456 / Lon:0:4:16.26929301681883539650105787408

海王星
        直交    (26.017903727403048365066254221328, -13.588748838571868437313069938731, -6.209591083833114310515153259547)
        黄道    Lat:-0°32′47″.1682641006345065399744222004 / Lon:328°54′2″.38418657848108378556344539
        赤道    Lat:-12°22′3″.1291050223541749368624057624 / Lon:22:4:55.694749059970304675835051654

冥王星
        直交    (3.952695717435162041650626254102, -30.104017732078831654286557907192, -10.584349861848978641319209592421)
        黄道    Lat:3°54′57″.7601166944022299635613378508 / Lon:277°20′21″.7268256258450513382181513568
        赤道    Lat:-19°19′23″.8796874385089597550253220816 / Lon:18:31:2.84652549526354183168181210856
  • Dim3クラスはXYZ座標を得るクラスです。
  • Poleクラスは極座標を得るクラスです。

西洋占星術で扱われる黄道十二宮の星座との対応を取ります。春分点を牡羊座として、各星の黄経角度より星座を割り当てます。
一般的な星占いは、このうち太陽がどの星座であるかを見ています。

import ajd4jp.*;
import ajd4jp.orrery.*;

public class Astro {
    public static void main(String[] argv) throws Exception {
        Ephemeris.init("DE421");
        ETD etd = new ETD(new AJD(2012, 1, 1, 15, 0, 0));
        for(Planet p: Planet.values()) {
            // 地球以外の星を表示
            if (p == Planet.EARTH) { continue; }
            if (!p.isBody()) { continue; }

            Zodiac  z = Zodiac.getZodiac(etd, p);
            System.out.println(p.getJpName() + "\t" + z.getJpName(true));
        }
    }
}
出力例
太陽    山羊座
水星    射手座
金星    水瓶座
月      牡羊座
火星    乙女座
木星    牡牛座
土星    天秤座
天王星  牡羊座
海王星  水瓶座
冥王星  山羊座

Ephemeris.init で指定するDEファイルは、JPL(ジェット推進研究所)が提供している天体暦テキストファイルのデータフォーマットを変更したものです。 DE421・DE422以外にも、いくつかのバージョンが存在します。もし他のバージョンを利用する場合は以下の手順でデータファイルを作成して下さい。

  1. JPLのFTP経由で、天体暦テキストファイルを入手。
    例えば de424 を利用したい場合は、de424 ディレクトリ配下にある、拡張子が 424 のファイル(testpo.424 は不要です)全てをダウンロードして下さい。
  2. ダウンロードしたファイル群を同じディレクトリに配置しておき、コマンドプロンプトより以下のコマンドを実行して下さい。
    java ajd4jp.orrery.tool.JPL2Bin 読み込むヘッダファイル 出力先ディレクトリ
    de424 であれば、読み込むヘッダファイルは header.424 です。
  3. 最後に Completed. と出力されれば、出力先ディレクトリ配下にデータファイルが作成されています。
java ajd4jp.orrery.tool.JPL2Bin in/de424/header.424 out/DE424
AJD4JP 1.4.1.2017(http://ajd4jp.osdn.jp/)
Copyright 2011-2017 Akira Terasaki

DE424
Reading in/de424/header.424
START = -3002/12/21 09:00:00[625296.5]  /  END = 3000/01/30 09:00:00[2816816.5]
Count : 14 10 13 11 8 7 6 6 6 13 11 10 10
Days : 8 16 16 32 32 32 32 32 32 4 16 8 8
String Length: 25
GROUP 1040 / 1041 count >> 222

Reading in/de424/ascp1800.424

Reading in/de424/ascp1900.424
SKIP: 2414992.500000000

Reading in/de424/ascp2000.424
SKIP: 2451536.500000000

Reading in/de424/ascp2100.424
SKIP: 2488048.500000000

START:  1799/12/16 09:00:00[2378480.5]
END  :  2200/03/05 09:00:00[2524656.5]
Completed.