Example #1
0
 public static function moonphase($k, $phi)
 {
     $A = array();
     $T = $k / 1236.85;
     $JDE = 2451550.09765 + 29.530588853 * $k + $T * $T * (0.0001337 + $T * (-1.5E-7 + 7.3E-10 * $T));
     $E = 1.0 + $T * (-0.002516 + -7.4E-6 * $T);
     $M = 2.5534 + 29.10535669 * $k + $T * $T * (-2.18E-5 + -1.1E-7 * $T);
     $M2 = 201.5643 + 385.81693528 * $k + $T * $T * (0.0107438 + $T * (1.239E-5 + -5.8E-8 * $T));
     $F = 160.7108 + 390.67050274 * $k + $T * $T * (-0.0016341 * $T * (-2.27E-6 + 1.1E-8 * $T));
     $O = 124.7746 - 1.5637558 * $k + $T * $T * (0.0020691 + 2.15E-6 * $T);
     $A[0] = 0.0;
     $A[1] = 299.77 + 0.107408 * $k - 0.009173000000000001 * $T * $T;
     $A[2] = 251.88 + 0.016321 * $k;
     $A[3] = 251.83 + 26.651886 * $k;
     $A[4] = 349.42 + 36.412478 * $k;
     $A[5] = 84.66 + 18.206239 * $k;
     $A[6] = 141.74 + 53.303771 * $k;
     $A[7] = 207.14 + 2.453732 * $k;
     $A[8] = 154.84 + 7.30686 * $k;
     $A[9] = 34.52 + 27.261239 * $k;
     $A[10] = 207.19 + 0.121824 * $k;
     $A[11] = 291.34 + 1.844379 * $k;
     $A[12] = 161.72 + 24.198154 * $k;
     $A[13] = 239.56 + 25.513099 * $k;
     $A[14] = 331.55 + 3.592518 * $k;
     $M = MoonPhase::torad($M);
     $M2 = MoonPhase::torad($M2);
     $F = MoonPhase::torad($F);
     $O = MoonPhase::torad($O);
     for ($i = 1; $i <= 14; $i++) {
         $A[$i] = MoonPhase::torad($A[$i]);
     }
     switch ($phi) {
         case 0:
             $JDE = $JDE - 0.4072 * sin($M2) + 0.17241 * $E * sin($M) + 0.01608 * sin(2.0 * $M2) + 0.01039 * sin(2.0 * $F) + 0.00739 * $E * sin($M2 - $M) - 0.00514 * $E * sin($M2 + $M) + 0.00208 * $E * $E * sin(2.0 * $M) - 0.00111 * sin($M2 - 2.0 * $F) - 0.00057 * sin($M2 + 2.0 * $F) + 0.00056 * $E * sin(2.0 * $M2 + $M) - 0.00042 * sin(3.0 * $M2) + 0.00042 * $E * sin($M + 2.0 * $F) + 0.00038 * $E * sin($M - 2.0 * $F) - 0.00024 * $E * sin(2.0 * $M2 - $M) - 0.00017 * sin($O) - 6.999999999999999E-5 * sin($M2 + 2.0 * $M) + 4.0E-5 * sin(2.0 * $M2 - 2.0 * $F) + 4.0E-5 * sin(3.0 * $M) + 3.0E-5 * sin($M2 + $M - 2.0 * $F) + 3.0E-5 * sin(2.0 * $M2 + 2.0 * $F) - 3.0E-5 * sin($M2 + $M + 2.0 * $F) + 3.0E-5 * sin($M2 - $M + 2.0 * $F) - 2.0E-5 * sin($M2 - $M - 2.0 * $F) - 2.0E-5 * sin(3.0 * $M2 + $M) + 2.0E-5 * sin(4.0 * $M2);
             break;
         case 1:
         case 3:
             $JDE = $JDE - 0.62801 * sin($M2) + 0.17172 * $E * sin($M) - 0.01183 * $E * sin($M2 + $M) + 0.008619999999999999 * sin(2.0 * $M2) + 0.00804 * sin(2.0 * $F) + 0.00454 * $E * sin($M2 - $M) + 0.00204 * $E * $E * sin(2.0 * $M) - 0.0018 * sin($M2 - 2.0 * $F) - 0.0007 * sin($M2 + 2.0 * $F) - 0.0004 * sin(3.0 * $M2) - 0.00034 * $E * sin(2.0 * $M2 - $M) + 0.00032 * $E * sin($M + 2.0 * $F) + 0.00032 * $E * sin($M - 2.0 * $F) - 0.00028 * $E * $E * sin($M2 + 2.0 * $M) + 0.00027 * $E * sin(2.0 * $M2 + $M) - 0.00017 * sin($O) - 5.0E-5 * sin($M2 - $M - 2.0 * $F) + 4.0E-5 * sin(2.0 * $M2 + 2.0 * $F) - 4.0E-5 * sin($M2 + $M + 2.0 * $F) + 4.0E-5 * sin($M2 - 2.0 * $M) + 3.0E-5 * sin($M2 + $M - 2.0 * $F) + 3.0E-5 * sin(3.0 * $M) + 2.0E-5 * sin(2.0 * $M2 - 2.0 * $F) + 2.0E-5 * sin($M2 - $M + 2.0 * $F) - 2.0E-5 * sin(3.0 * $M2 + $M);
             $W = 0.00306 - 0.00038 * $E * cos($M) + 0.00026 * cos($M2) - 2.0E-5 * cos($M2 - $M) + 2.0E-5 * cos($M2 + $M) + 2.0E-5 * cos(2.0 * $F);
             if ($phi == 3) {
                 $W = -$W;
             }
             $JDE += $W;
             break;
         case 2:
             $JDE = $JDE - 0.40614 * sin($M2) + 0.17302 * $E * sin($M) + 0.01614 * sin(2.0 * $M2) + 0.01043 * sin(2.0 * $F) + 0.00734 * $E * sin($M2 - $M) - 0.00515 * $E * sin($M2 + $M) + 0.00209 * $E * $E * sin(2.0 * $M) - 0.00111 * sin($M2 - 2.0 * $F) - 0.00057 * sin($M2 + 2.0 * $F) + 0.00056 * $E * sin(2.0 * $M2 + $M) - 0.00042 * sin(3.0 * $M2) + 0.00042 * $E * sin($M + 2.0 * $F) + 0.00038 * $E * sin($M - 2.0 * $F) - 0.00024 * $E * sin(2.0 * $M2 - $M) - 0.00017 * sin($O) - 6.999999999999999E-5 * sin($M2 + 2.0 * $M) + 4.0E-5 * sin(2.0 * $M2 - 2.0 * $F) + 4.0E-5 * sin(3.0 * $M) + 3.0E-5 * sin($M2 + $M - 2.0 * $F) + 3.0E-5 * sin(2.0 * $M2 + 2.0 * $F) - 3.0E-5 * sin($M2 + $M + 2.0 * $F) + 3.0E-5 * sin($M2 - $M + 2.0 * $F) - 2.0E-5 * sin($M2 - $M - 2.0 * $F) - 2.0E-5 * sin(3.0 * $M2 + $M) + 2.0E-5 * sin(4.0 * $M2);
             break;
         default:
             return 0.0;
     }
     return $JDE + 0.000325 * sin($A[1]) + 0.000165 * sin($A[2]) + 0.000164 * sin($A[3]) + 0.000126 * sin($A[4]) + 0.00011 * sin($A[5]) + 6.2E-5 * sin($A[6]) + 6.0E-5 * sin($A[7]) + 5.6E-5 * sin($A[8]) + 4.7E-5 * sin($A[9]) + 4.2E-5 * sin($A[10]) + 4.0E-5 * sin($A[11]) + 3.7E-5 * sin($A[12]) + 3.5E-5 * sin($A[13]) + 2.3E-5 * sin($A[14]);
 }
Example #2
0
 private function StrartLun($prevDongChi, $offset)
 {
     $lunperiod = 29.530588853;
     $lun = (int) (($prevDongChi - 2451550.09765) / $lunperiod);
     $newMoonAfterDongChi = MoonPhase::moonphasebylunation($lun, 0);
     $newMoonAfterDongChi2 = MoonPhase::moonphasebylunation($lun + 1, 0);
     $dongChi = LunarYear::JDtoDate($prevDongChi + $offset);
     $newMoon = LunarYear::JDtoDate($newMoonAfterDongChi + $offset);
     $newMoon2 = LunarYear::JDtoDate($newMoonAfterDongChi2 + $offset);
     if ($newMoon < $dongChi & $newMoon2 >= $dongChi) {
         $lun++;
     }
     if ($newMoon2 < $dongChi) {
         $lun += 2;
     }
     return $lun;
 }