Ejemplo n.º 1
0
 /**
  * Get approximate ayanamsha value.
  * 
  * @param null|DateTime $Date Date (optional)
  * @param string $ayanamsha Ayanamsha name (optional)
  * @return float
  */
 public static function getAyanamsha(DateTime $Date = null, $ayanamsha = self::AYANAMSHA_LAHIRI)
 {
     if (is_null($Date)) {
         $Date = new DateTime('now');
     }
     $TimeZone = $Date->getTimezone();
     $yearMatching = sprintf('%04d', abs(self::$coincidence[$ayanamsha]));
     $eraMatching = strval(self::$coincidence[$ayanamsha])[0] == '-' ? '-' : '';
     $dateMatching = $eraMatching . $yearMatching . '-01-01';
     $DateMatching = new DateTime($dateMatching, $TimeZone);
     $Interval = $DateMatching->diff($Date);
     $factor = $Interval->days / Astro::DURATION_YEAR_GREGORIAN;
     $ayanamshaValue = Math::dmsToDecimal(['d' => 0, 'm' => 0, 's' => Astro::getPrecessionSpeed()]) * $factor;
     return $ayanamshaValue;
 }
Ejemplo n.º 2
0
 /**
  * Get Nakshatra. Ending Moment of asterism of the day, that is, the stellar 
  * mansion in which graha is located for an observer at the center of the Earth. 
  * 
  * @param bool $withLimit Time limit
  * @param bool $withAbhijit Take into account the Abhijit nakshatra
  * @param string $grahaKey Graha key (default: Ch)
  * @return array
  */
 public function getNakshatra($withLimit = false, $withAbhijit = false, $grahaKey = Graha::KEY_CH)
 {
     $this->checkData(__FUNCTION__);
     $unit = 360 / 27;
     if (array_key_exists($grahaKey, Graha::$graha)) {
         $lngGraha = $this->getData()['graha'][$grahaKey]['longitude'];
     } else {
         if (!isset($this->getData()['lagna'][$grahaKey]['longitude'])) {
             throw new Exception\InvalidArgumentException("Longitude value for the key '{$grahaKey}' is not defined.");
         } else {
             $lngGraha = $this->getData()['lagna'][$grahaKey]['longitude'];
         }
     }
     $nakshatraUnits = Math::partsToUnits($lngGraha, $unit);
     $nakshatra = [];
     $nakshatra['anga'] = Panchanga::ANGA_NAKSHATRA;
     if ($withAbhijit) {
         if ($nakshatraUnits['units'] == 21 || $nakshatraUnits['units'] == 22) {
             $Abhijit = Nakshatra::getInstance(28);
             $abhijitStart = Math::dmsToDecimal($Abhijit->nakshatraStart);
             $abhijitEnd = Math::dmsToDecimal($Abhijit->nakshatraEnd);
             if ($lngGraha < $abhijitStart) {
                 $nakshatra['key'] = 21;
                 $N = Nakshatra::getInstance($nakshatra['key']);
                 $nStart = Math::dmsToDecimal($N->nakshatraStart);
                 $unit = $abhijitStart - $nStart;
                 $left = $abhijitStart - $lngGraha;
             } elseif ($lngGraha >= $abhijitStart && $lngGraha < $abhijitEnd) {
                 $nakshatra['key'] = 28;
                 $unit = $abhijitEnd - $abhijitStart;
                 $left = $abhijitEnd - $lngGraha;
             } else {
                 $nakshatra['key'] = 22;
                 $N = Nakshatra::getInstance($nakshatra['key']);
                 $nEnd = Math::dmsToDecimal($N->nakshatraEnd);
                 $unit = $nEnd - $abhijitEnd;
                 $left = $nEnd - $lngGraha;
             }
             $nakshatra['ratio'] = $unit / Math::dmsToDecimal(Nakshatra::$arc);
         } else {
             $nakshatra['key'] = $nakshatraUnits['units'];
             $nakshatra['ratio'] = 1;
             $left = $unit - $nakshatraUnits['parts'];
         }
         $nakshatra['abhijit'] = true;
     } else {
         $nakshatra['key'] = $nakshatraUnits['units'];
         $nakshatra['ratio'] = 1;
         $nakshatra['abhijit'] = false;
         $left = $unit - $nakshatraUnits['parts'];
     }
     $nakshatra['left'] = $left * 100 / $unit;
     $nakshatra['name'] = Nakshatra::$nakshatra[$nakshatra['key']];
     if ($nakshatra['left'] < 100 && $nakshatra['left'] >= 75) {
         $nakshatra['pada'] = 1;
     } elseif ($nakshatra['left'] < 75 && $nakshatra['left'] >= 50) {
         $nakshatra['pada'] = 2;
     } elseif ($nakshatra['left'] < 50 && $nakshatra['left'] >= 25) {
         $nakshatra['pada'] = 3;
     } else {
         $nakshatra['pada'] = 4;
     }
     if ($withLimit) {
         $this->AngaDefiner = clone $this;
         $limit = $this->getAngaLimit($nakshatra);
         $nakshatra['end'] = $limit;
         $this->AngaDefiner = null;
     }
     return $nakshatra;
 }
Ejemplo n.º 3
0
 /**
  * Determine if the graha is in pushkara bhaga or pushkara navamsha. Indicate 
  * when to pushkara bhaga remains less than 1 degree.
  * 
  * @return bool|int|float Distance to pushkara bhaga
  * @see Vaidyanatha Dikshita. Jataka Parijata. Chapter 1, Verse 58.
  */
 public function isPushkara($type = Graha::PUSHKARA_NAVAMSHA)
 {
     $rashiGraha = $this->getEnvironment()['graha'][$this->objectKey]['rashi'];
     $degGraha = $this->getEnvironment()['graha'][$this->objectKey]['degree'];
     $valNavamsha = Math::dmsToDecimal(['d' => 3, 'm' => 20]);
     switch ($type) {
         case Graha::PUSHKARA_BHAGA:
             $degPushkara = Rashi::$pushkaraBhaga[$rashiGraha];
             $distanceGraha = abs($degGraha - $degPushkara);
             if ($distanceGraha < 1) {
                 return $distanceGraha;
             } else {
                 return false;
             }
             break;
         case Graha::PUSHKARA_NAVAMSHA:
         default:
             $numNavamsha = null;
             $degNavamsha = [];
             for ($i = 0; $i <= 1; $i++) {
                 $degNavamsha['start'] = (Rashi::$pushkaraNavamsha[$rashiGraha][$i] - 1) * $valNavamsha;
                 $degNavamsha['end'] = $degNavamsha['start'] + $valNavamsha;
                 if ($degGraha >= $degNavamsha['start'] && $degGraha < $degNavamsha['end']) {
                     $numNavamsha = Rashi::$pushkaraNavamsha[$rashiGraha][$i];
                     break;
                 }
             }
             if (!is_null($numNavamsha)) {
                 $number = ($rashiGraha - 1) * 9 + $numNavamsha;
                 $navamsha = Math::numberInCycle(1, $number);
                 return $navamsha;
             } else {
                 return false;
             }
     }
 }
Ejemplo n.º 4
0
 /**
  * Get obliquity of the ecliptic.
  * 
  * @param null|DateTime $DateTime Date (optional)
  * @return float In degree
  */
 public static function getEclipticObliquity(DateTime $DateTime = null)
 {
     $jc = Time::getJC($DateTime);
     $k = Math::dmsToDecimal(['d' => 23, 'm' => 26, 's' => 21.448]);
     $k1 = Math::dmsToDecimal(['d' => 0, 'm' => 0, 's' => 46.815]);
     $k2 = Math::dmsToDecimal(['d' => 0, 'm' => 0, 's' => 0.00059]);
     $k3 = Math::dmsToDecimal(['d' => 0, 'm' => 0, 's' => 0.001813]);
     $e = $k - $k1 * $jc - $k2 * $jc ** 2 + $k3 * $jc ** 3;
     return $e;
 }
Ejemplo n.º 5
0
 /**
  * Get converting value of angle.
  * 
  * @param string $value
  * @param bool $isLongitude
  * @return float
  */
 private function getAngle($value, $isLongitude = false)
 {
     $valueArray = $this->convertValue($value);
     $decimal = Math::dmsToDecimal($valueArray);
     if ($isLongitude) {
         $decimal *= -1;
     }
     return $decimal;
 }