/** * 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; }
/** * 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; }
/** * 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; } } }
/** * 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; }
/** * 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; }