目次
サンプル・プログラム:実行例

サンプル・プログラム
planetPosition.php | サンプル・プログラム本体 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooAstronomy.php | 天文計算クラス pahooAstronomy。 使い方は「PHPでホロスコープを描く」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooCalendar.php | 暦計算クラス pahooCalendar。 暦計算クラスの使い方は「PHPで日出没・月出没・月齢・潮を計算」を参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
1.0.0 | 2025/06/01 | 初版 |
バージョン | 更新日 | 内容 |
---|---|---|
1.8.1 | 2025/03/15 | validRegexPattern() -- debug |
1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
1.7.0 | 2024/10/09 | validURL() validEmail() 追加 |
1.6.0 | 2024/10/07 | isButton() -- buttonタグに対応 |
1.5.0 | 2024/01/28 | exitIfExceedVersion() 追加 |
バージョン | 更新日 | 内容 |
---|---|---|
4.5.1 | 2025/05/31 | deg2ddmm(), deg2hhmm() 不具合修正 |
4.5.0 | 2024/03/17 | ヒジュラ暦メソッドを追加 |
4.4.1 | 2024/03/17 | getCabinetOfficeHolidayTable() -- bug-fix |
4.4.0 | 2024/02/25 | 内閣府の祝日表を参照できるようにした |
4.3.2 | 2023/02/11 | getSolarTerm72() 表記改訂:水澤腹堅→水沢腹堅 |
バージョン | 更新日 | 内容 |
---|---|---|
2.1.0 | 2025/06/01 | euatorialCoordinate() を追加 |
2.0.0 | 2025/05/31 | 全面改訂, 天象を計算できるようにした. |
1.0 | 2019/03/23 | 初版 |
準備:定数
planetPosition.php
58: // 初期値(START) =============================================================
59:
60: // 指定できる西暦年の範囲
61: define('MIN_YEAR', 1901);
62: define('MAX_YEAR', 2099);
63:
64: // 表示言語(jp:日本語, en:英語, en3:英語略記)
65: define('LANGUAGE', 'jp');
66:
67: // 世界時からの時差(日本標準時)
68: define('UTCDIFF', +9.0);
69:
70: // 計算時刻(時)
71: define('HOUR', 21);
72:
73: // 計算期間(月)
74: define('CALC_TERM', 3);
75:
76: // 惑星名(初期値)
77: define('DEF_PLANET', 'Mars');
78:
79: // Spinner - jQuery UI を使用するかどうか
80: define('USESPINNER', TRUE);
81:
82: // 数値増減クリックで即判定するかどうか(TRUE:即判定,FALE:判定ボタンを用意)
83: define('ONCHANGE', FALSE);
84:
85: // 表示幅(単位:ピクセル)
86: define('WIDTH', 550);
87:
88: // 初期値(END) ===============================================================
準備:pahooAstronomy クラス
pahooAstronomy.php
11: require_once('pahooCalendar.php');
12:
13: // pahooAstronomyクラス ======================================================
14: class pahooAstronomy extends pahooCalendar {
地心黄道座標から赤道座標を求める
- 地心黄道座標(極座標)を地心黄道直交座標へ変換する。
- 地心黄道直交座標を赤道直交座標へ変換する。
- 赤道直交座標を赤道座標(極座標)へ変換する。
座標系 | 中心 | 種類 | 座標値 |
---|---|---|---|
日心黄道座標 | 太陽 | 極座標 | |
日心黄道直交座標 | 太陽 | 直交座標 | |
地心黄道座標 | 地心 | 極座標 | |
地心黄道直交座標 | 地球 | 直交座標 | |
赤道直交座標 | 地球 | 直交座標 | |
赤道座標 | 地心 | 極座標 |
解説:惑星の赤道座標を求める
pahooAstronomy.php
326: /**
327: * 惑星の赤道座標を求める.
328: * @param string $planet 惑星名(Mercury, Venus, ... Pluto)
329: * @param int $year, $month, $day グレゴリオ暦による年月日
330: * @param double $hour, $min, $sec 時分秒(ローカル時間)
331: * @return array(赤経,赤緯) (単位:度)/FALSE:惑星名の間違い
332: */
333: function euatorialCoordinate($planet, $year, $month, $day, $hour, $min, $sec) {
334: // 惑星名のバリデーション
335: if (! isset($this->PlanetOrbitalElements[$planet])) return FALSE;
336:
337: // 地心黄道座標
338: list($l, $b, $r) = $this->zodiacEarthAP($planet, $year, $month, $day, $hour, $min, $sec);
339:
340: // ユリウス世紀
341: $jd = $this->AD2JD($year, $month, $day, $hour, $min, $sec, $this->TDIFF);
342: $T = $this->julianCentury($jd);
343:
344: // 黄道傾斜角
345: $epsilon = $this->meanObliquity($T);
346:
347: // 地心黄道直交座標へ変換
348: $Xe = cos(deg2rad($b)) * cos(deg2rad($l));
349: $Ye = cos(deg2rad($b)) * sin(deg2rad($l));
350: $Ze = sin(deg2rad($b));
351:
352: // 赤道直交座標へ変換
353: $X = $Xe;
354: $Y = $Ye * cos(deg2rad($epsilon)) - $Ze * sin(deg2rad($epsilon));
355: $Z = $Ye * sin(deg2rad($epsilon)) + $Ze * cos(deg2rad($epsilon));
356:
357: // 赤道座標(極座標)へ変換
358: $r1 = sqrt($X * $X + $Y * $Y + $Z * $Z);
359: $delta = rad2deg(asin($Z / $r1));
360: $alpha = $this->__angle(rad2deg(atan2($Y, $X)));
361:
362: return array($alpha, $delta, $r);
363: }
pahooAstronomy.php
265: /**
266: * 黄道傾斜角を求める.
267: * @param double $T ユリウス世紀
268: * @return double 平均黄道傾斜(単位:度)
269: */
270: function meanObliquity($T) {
271: // 平均黄道傾斜 ε0(単位:度)
272: $U = $T / 100.0;
273: $epsilon0 = 23.43929111 - 46.8150 / 3600.0 * $T - 0.00059 / 3600.0 * $T * $T + 0.001813 / 3600.0 * $T * $T * $T;
274:
275: return $epsilon0;
276: }
準備:惑星の位置を一覧表示する
planetPosition.php
340: // 惑星の位置を一覧表にする.
341: $table =<<< EOT
342: <table>
343: <tr><th>年月日</th><th>赤経</th><th>赤緯</th><th>地心距離<br>(au)</th></tr>
344:
345: EOT;
346:
347: if ($errmsg == '') {
348: $yy = $year;
349: $mm = $month;
350: // 指定期間
351: for ($i = 0; $i < CALC_TERM; $i++) {
352: if ($mm > 12) {
353: $yy++;
354: $mm = 1;
355: }
356: $cnt = 1;
357: $day_of_month = $pa->getDaysInMonth($yy, $mm);
358: // 1ヶ月分
359: for ($dd = 1; $dd <= $day_of_month; $dd++) {
360: list($alpha, $delta, $r) = $pa->euatorialCoordinate($planet, $yy, $mm, $dd, HOUR, 0, 0);
361: $ymd = $ymd = sprintf('%04d年%02d月%02d日(%s)', $yy, $mm, $dd, $pa->getWeekString($yy, $mm, $dd));
362: $alpha2 = $pa->deg2hhmm($alpha);
363: $delta2 = $pa->deg2ddmm($delta);
364: $r2 = sprintf('%.2f', $r);
365:
366: $table .=<<< EOT
367: <tr>
368: <td>{$ymd}</td>
369: <td>{$alpha2}</td>
370: <td>{$delta2}</td>
371: <td>{$r2}</td>
372: </tr>
373:
374: EOT;
375: }
376: $mm++;
377: }
378: $table .= "</table>\n";
379: }
380:
381: // 表示用HTMLを生成する.
382: $HtmlBody = makeCommonBody($planet, $year, $month, $table, $errmsg, $pa);
参考サイト
- PHPでホロスコープを描く:ぱふぅ家のホームページ
- PHPで惑星の天象を一覧表示する:ぱふぅ家のホームページ
- 『かくして冥王星は降格された』(ニール・ド・グラス・タイソン/吉田三知世,2009年08月)
- 日本科学未来館:特別展「チ。 ―地球の運動について― 地球が動く」:ぱふぅ家のホームページ
- 太陽系天体の高度と方位:国立天文台
今回は、「PHPでホロスコープを描く」で作った地球を基点にする惑星の位置(地心黄道座標)を計算するプログラムを利用し、ある期間の惑星の位置(赤経・赤緯)を一覧表示するPHPプログラムを作ることにする。
2006年(平成18年)、冥王星は矮惑星に降格になったが、ここでは冥王星の位置も一覧に含める。