« 科学映像 | トップページ | MEL → javaScript »

2010年9月16日 (木)

MELでアスペクト計算

月イチで通っている西洋占星術の講座で、出生時の惑星と任意の日(例えば2010年の9月15日とか)の惑星がどういう座相をなしているか次回までに計算しなければならなかったのですが、ひとつずつ計算していくのが面倒だったので、MayaのMELスクリプトを書いて計算させるようにしました。世界広しと言えど、Mayaを占星術の計算に利用しているのは僕くらいでしょう(笑)。本当はjavaScriptとかで書いてウェブブラウザでできるようにしたほうが便利なんでしょうが、10年以上やってないんで忘れてしまいました。で、Mayaが目の前にあるので、じゃあこれでやっちゃえということで。

西洋占星術では、出生時の惑星位置と、未来の任意の日時の惑星位置を比較することで未来予測が可能になります。未来の惑星の位置は計算で算出可能で、天文暦という形で手に入れることができます。天文暦から目的の日時の各惑星の位置を探しだして、2つの日時の惑星どうしが、何度の角度になっているかを調べるのです。例えば自分が生まれたときには金星は牡羊座の15度の位置にあったとします。そして未来のとある日では獅子座の20度の位置にある場合、お互いの角度は125度ということになります。なぜならおひつじ座と獅子座の間には牡牛座、双子座、蟹座の3つがあり、各星座の幅は30度だからです。

さて、西洋占星術で主に利用する惑星は10個あります(太陽、月、水星、金星、火星、木星、土星、天王星、海王星、冥王星)。それぞれ全部総当りで出生時と未来のある時点の位置関係を出す必要がありますから、合計100回の計算をしなければなりません。これって結構面倒くさいのです。なので一度スクリプトを書いておけば、日にちが変わっても使えるので便利です。そのスクリプトが下記になります。各惑星には<惑星名><星座><角度>の3つの情報を持たせなければいけないので多次元配列が必要になりますが、Mayaでは"matrix"という型が用意されており、それを使うことにします。matrixは文字列を扱えないので、全て数値に置き換えています。すなわち惑星名だと太陽は0、月は1、水星は2・・・・という具合です。星座は牡羊座が1、牡牛座が2、双子座が3で、最後の魚座が12となります。

matrixの各意味を。$ntl は「ネイタル」、すなわち出生時の各惑星の情報を保持します。各要素は右から「惑星名」「星座」「位置(角度)」です。それに対して$tst は「トランジット」、任意のある時点での惑星情報を保持します。要素の意味はネイタルと同じです。ちなみに下記スクリプトの$ntlに格納している値は僕の惑星情報ではありません(適当に書いた値です)。自分の出生時の惑星配列を晒してしまうのは、自分のDNA情報をばらしているようなもので危険なのです(とは言え、誕生日と出生時間、出生場所が分かれば算出できてしまいますが)。各惑星のなす角度が、0度に近いと「コンジャンクション」、90度に近いと「スクウェア」、120度に近いと「トライン」、180度に近いと「オポジション」といった具合に、運勢に特別な意味を持つようになります。

// 出生時の惑星位置
matrix $ntl[10][3] = <<0, 12, 10.0;
                       1, 8, 0.5;
                       2, 1, 21.6;
                       3, 9, 5.2;
                       4, 11, 19.4;
                       5, 10, 28.2;
                       6, 4, 8.5;
                       7, 5, 14.7;
                       8, 1, 17.3;
                       9, 4, 20.5>>;

// ある日の惑星位置
matrix $tst[10][3] = <<0, 5, 8.0;
                       1, 12, 10.0;
                       2, 6, 4.0;
                       3, 6, 23.0;
                       4, 7, 1.0;
                       5, 1, 3.0;
                       6, 7, 0.0;
                       7, 1, 0.0;
                       8, 11, 27.0;
                       9, 10, 3.0>>;

// 惑星名
string $name[] = {"sun","moon","mercury","venus","mars","jupiter","saturn","uranus","neptune","pluto"};

matrix $ntlB[10][1];
matrix $tstB[10][1];
float $v, $v2, $absV;
string $aspect;

// 各惑星の位置を白羊宮0度からの角度に変換
for($i = 0; $i < 10; $i++) {
   $ntlB[$i][0] = $ntl[$i][2]+(($ntl[$i][1]-1)*30);
   $tstB[$i][0] = $tst[$i][2]+(($tst[$i][1]-1)*30);
   print($ntlB[$i][0]+", "+$tstB[$i][0]+"\n");
}

// アスペクトの算出(オーブ5度)と印字
for($i = 0; $i < 10; $i++) {
   for($h = 0; $h < 10; $h++) {
      $v = $ntlB[$i][0]-$tstB[$h][0];
      $absV = abs($v);
      if($absV > 180) {
         $absV = 360-$absV;
      }
      if($absV >= 0 && $absV <= 5) {
         $aspect = "Conjunction";
      }
      else if($absV >= 85 && $absV <= 95) {
         $aspect = "Square";
      }
      else if($absV >= 115 && $absV <= 125) {
         $aspect = "Trine";
      }
      else if($absV >= 175 && $absV <= 185) {
         $aspect = "Opposition";
      }
      else {
         $aspect = "";
      }

      print($name[$i]+"(N)-"+$name[$h]+"(T): "+$absV+" "+$aspect+"\n");
   }
   print("\n");
}

|
|

« 科学映像 | トップページ | MEL → javaScript »

西洋占星術」カテゴリの記事