/** * Constructor * * @param array $importData * @param string $lagna * @throws \Jyotish\Base\Exception\InvalidArgumentException */ public function __construct(array $importData, $lagna = Graha::KEY_LG) { $this->checkData($importData); foreach ($this->dataRequired as $block) { foreach ($this->importData[$block] as $key => $params) { if (!isset($params['rashi'])) { $units = Math::partsToUnits($params['longitude']); $this->importData[$block][$key]['rashi'] = $units['units']; $this->importData[$block][$key]['degree'] = $units['parts']; } } } if (!isset($this->importData[Data::BLOCK_BHAVA]) || $this->lagna != $lagna) { if (array_key_exists($lagna, Graha::$graha)) { $block = Data::BLOCK_GRAHA; } elseif ($lagna == Graha::KEY_LG) { $block = Data::BLOCK_LAGNA; } elseif (array_key_exists($lagna, Bhava::$bhava)) { $block = Data::BLOCK_BHAVA; } else { throw new \Jyotish\Base\Exception\InvalidArgumentException("The value of lagna should be 'Lg', key of graha or bhava."); } $this->lagna = $lagna; $longitude = $this->importData[$block][$lagna]['longitude']; for ($b = 1; $b <= 12; $b++) { $this->importData[Data::BLOCK_BHAVA][$b]['longitude'] = $longitude < 360 ? $longitude : $longitude - 360; $units = Math::partsToUnits($this->importData[Data::BLOCK_BHAVA][$b]['longitude']); $this->importData[Data::BLOCK_BHAVA][$b]['rashi'] = $units['units']; $this->importData[Data::BLOCK_BHAVA][$b]['degree'] = $units['parts']; $longitude += 30; } } }
/** * Get varga rashi. * * @param array $ganitaRashi * @return array * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 6, Verse 15. */ public function getVargaRashi(array $ganitaRashi) { $amshaSize = 30 / $this->vargaAmsha; $result = Math::partsToUnits($ganitaRashi['degree'], $amshaSize, 'floor'); $vargaRashi = []; $vargaRashi['degree'] = $result['parts'] * 30 / $amshaSize; $vargaRashi['rashi'] = Math::numberInCycle($ganitaRashi['rashi'] + $result['units']); return $vargaRashi; }
/** * Get varga rashi. * * @param array $ganitaRashi * @return array * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 6, Verse 5-6. */ public function getVargaRashi(array $ganitaRashi) { $amshaSize = 30 / $this->vargaAmsha; $result = Math::partsToUnits($ganitaRashi['degree'], $amshaSize, 'floor'); $vargaRashi = []; $vargaRashi['degree'] = $result['parts'] * 30 / $amshaSize; if ($ganitaRashi['degree'] < 15 && $ganitaRashi['rashi'] % 2 || $ganitaRashi['degree'] >= 15 && !($ganitaRashi['rashi'] % 2)) { $vargaRashi['rashi'] = 5; } else { $vargaRashi['rashi'] = 4; } return $vargaRashi; }
/** * Get varga rashi. * * @param array $ganitaRashi * @return array * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 6, Verse 7-8. */ public function getVargaRashi(array $ganitaRashi) { $amshaSize = 30 / $this->vargaAmsha; $result = Math::partsToUnits($ganitaRashi['degree'], $amshaSize, 'floor'); $vargaRashi = []; $vargaRashi['degree'] = $result['parts'] * 30 / $amshaSize; if ($ganitaRashi['degree'] < 10) { $vargaRashi['rashi'] = Math::numberInCycle($ganitaRashi['rashi']); } elseif ($ganitaRashi['degree'] >= 10 && $ganitaRashi['degree'] < 20) { $vargaRashi['rashi'] = Math::numberInCycle($ganitaRashi['rashi'], 5); } else { $vargaRashi['rashi'] = Math::numberInCycle($ganitaRashi['rashi'], 9); } return $vargaRashi; }
/** * Get varga rashi. * * @param array $ganitaRashi * @return array * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 6, Verse 27-28. */ public function getVargaRashi(array $ganitaRashi) { $amshaSize = 30 / $this->vargaAmsha; $result = Math::partsToUnits($ganitaRashi['degree'], $amshaSize, 'floor'); $vargaRashi = []; $vargaRashi['degree'] = $result['parts'] * 30 / $amshaSize; if ($ganitaRashi['degree'] < 5) { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_MA; } else { $lord = Graha::KEY_SK; } } elseif ($ganitaRashi['degree'] >= 5 && $ganitaRashi['degree'] < 10) { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_SA; } else { $lord = Graha::KEY_BU; } } elseif ($ganitaRashi['degree'] >= 10 && $ganitaRashi['degree'] < 18) { $lord = Graha::KEY_GU; } elseif ($ganitaRashi['degree'] >= 18 && $ganitaRashi['degree'] < 25) { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_BU; } else { $lord = Graha::KEY_SA; } } else { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_SK; } else { $lord = Graha::KEY_MA; } } if ($ganitaRashi['rashi'] % 2) { $trait = 'positive'; } else { $trait = 'negative'; } $grahaObject = Graha::getInstance($lord); $grahaSwaRashi = $grahaObject->grahaSwa; $vargaRashi['rashi'] = $grahaSwaRashi[$trait]['rashi']; return $vargaRashi; }
/** * Get varga rashi. * * @param array $ganitaRashi * @return array * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 6, Verse 17-21. */ public function getVargaRashi(array $ganitaRashi) { $amshaSize = 30 / $this->vargaAmsha; $result = Math::partsToUnits($ganitaRashi['degree'], $amshaSize, 'floor'); $vargaRashi = []; $vargaRashi['degree'] = $result['parts'] * 30 / $amshaSize; $rashiObject = Rashi::getInstance((int) $ganitaRashi['rashi']); $rashiBhava = $rashiObject->rashiBhava; switch ($rashiBhava) { case Rashi::BHAVA_CHARA: $vargaRashi['rashi'] = Math::numberInCycle(1 + $result['units']); break; case Rashi::BHAVA_STHIRA: $vargaRashi['rashi'] = Math::numberInCycle(9 + $result['units']); break; case Rashi::BHAVA_DVISVA: $vargaRashi['rashi'] = Math::numberInCycle(5 + $result['units']); break; } return $vargaRashi; }
/** * Get varga rashi. * * @param array $ganitaRashi * @return array * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 6, Verse 24-26. */ public function getVargaRashi(array $ganitaRashi) { $amshaSize = 30 / $this->vargaAmsha; $result = Math::partsToUnits($ganitaRashi['degree'], $amshaSize, 'floor'); $vargaRashi = []; $vargaRashi['degree'] = $result['parts'] * 30 / $amshaSize; $rashiObject = Rashi::getInstance((int) $ganitaRashi['rashi']); $rashiBhuta = $rashiObject->rashiBhuta; switch ($rashiBhuta) { case Maha::BHUTA_AGNI: $vargaRashi['rashi'] = Math::numberInCycle(1 + $result['units']); break; case Maha::BHUTA_PRITVI: $vargaRashi['rashi'] = Math::numberInCycle(4 + $result['units']); break; case Maha::BHUTA_VAYU: $vargaRashi['rashi'] = Math::numberInCycle(7 + $result['units']); break; case Maha::BHUTA_JALA: $vargaRashi['rashi'] = Math::numberInCycle(10 + $result['units']); break; } return $vargaRashi; }
/** * Set graha character. * * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 3, Verse 11. * @see Varahamihira. Brihat Jataka. Chapter 2, Verse 5. */ protected function setGrahaCharacter() { $lonCh = $this->getEnvironment()['graha'][Graha::KEY_CH]['longitude']; $lonSy = $this->getEnvironment()['graha'][Graha::KEY_SY]['longitude']; if ($lonCh < $lonSy) { $lonCh = $lonCh + 360; } $tithiUnits = Math::partsToUnits($lonCh - $lonSy, 12); if ($tithiUnits['units'] >= 8 && $tithiUnits['units'] < 23) { $this->grahaCharacter = Graha::CHARACTER_SHUBHA; } else { $this->grahaCharacter = Graha::CHARACTER_PAPA; } }
/** * Shree lagna calculation. * * @return array * @see Maharishi Jaimini. Jaimini Upadesha Sutras. Chapter 2, Quarter 4, Verse 27. */ public function getSL() { $this->checkData(__FUNCTION__); $nakshatra = $this->getData()['panchanga']['nakshatra']; $result1 = (1 - $nakshatra['left'] / 100) * 360; $result2 = $result1 + $this->getData()['lagna'][Graha::KEY_LG]['longitude']; $lngSL = $result2 > 360 ? $result2 - 360 : $result2; $unitSL = Math::partsToUnits($lngSL); return ['longitude' => $lngSL, 'rashi' => $unitSL['units'], 'degree' => $unitSL['parts']]; }
/** * Get Yoga. Ending Moment of the angular relationship between Sun and Moon * (Apparent Moon plus Apparent Sun). * * @param bool $withLimit Time limit * @return array */ public function getYoga($withLimit = false) { $this->checkData(__FUNCTION__); $unit = 360 / 27; $lngCh = $this->getData()['graha'][Graha::KEY_CH]['longitude']; $lngSy = $this->getData()['graha'][Graha::KEY_SY]['longitude']; $lngSum = $lngCh + $lngSy; if ($lngSum > 360) { $lngSum = $lngSum - 360; } $yogaUnits = Math::partsToUnits($lngSum, $unit); $yoga = []; $yoga['anga'] = Panchanga::ANGA_YOGA; $yoga['key'] = $yogaUnits['units']; $yoga['name'] = Yoga::$yoga[$yoga['key']]; $yoga['left'] = ($unit - $yogaUnits['parts']) * 100 / $unit; if ($withLimit) { $this->AngaDefiner = clone $this; $limit = $this->getAngaLimit($yoga); $yoga['end'] = $limit; $this->AngaDefiner = null; } return $yoga; }
/** * Format params. * * @param array $input Swetest data * @param null|array $params Array of blocks (optional) * @return array */ private function formatParams(array $input, array $params = null) { $dataParams = []; if (is_null($params) || in_array(Data::BLOCK_GRAHA, $params) && in_array(Data::BLOCK_BHAVA, $params)) { $count = 22; } elseif (in_array(Data::BLOCK_GRAHA, $params)) { $count = 8; } elseif (in_array(Data::BLOCK_BHAVA, $params)) { $count = 14; } foreach ($input as $k => $v) { // Break if swetest warning if ($k == $count) { break; } $parametersString = str_replace(' ', '', $v); $parameters = explode(',', $parametersString); $bodyName = $parameters[0]; $units = Math::partsToUnits($parameters[1]); if (array_key_exists($bodyName, $this->outputPlanets)) { $dataParams[Data::BLOCK_GRAHA][$this->outputPlanets[$bodyName]] = ['longitude' => (double) $parameters[1], 'latitude' => (double) $parameters[2], 'speed' => (double) $parameters[3], 'ascension' => (double) $parameters[4], 'declination' => (double) $parameters[5], 'rashi' => $units['units'], 'degree' => $units['parts']]; } elseif (array_key_exists($bodyName, $this->outputHouses)) { $dataParams[Data::BLOCK_BHAVA][$this->outputHouses[$bodyName]] = ['longitude' => (double) $parameters[1], 'ascension' => (double) $parameters[2], 'declination' => (double) $parameters[3], 'rashi' => $units['units'], 'degree' => $units['parts']]; } elseif (array_key_exists($bodyName, $this->outputLagna)) { $dataParams[Data::BLOCK_LAGNA][$this->outputLagna[$bodyName]] = ['longitude' => (double) $parameters[1], 'ascension' => (double) $parameters[2], 'declination' => (double) $parameters[3], 'rashi' => $units['units'], 'degree' => $units['parts']]; } } if (is_null($params) || in_array(Data::BLOCK_GRAHA, $params)) { $longitudeKe = Math::oppositeValue($dataParams['graha'][Graha::KEY_RA]['longitude'], 360); $ascensionKe = Math::oppositeValue($dataParams['graha'][Graha::KEY_RA]['ascension'], 360); $units = Math::partsToUnits($longitudeKe); $dataParams['graha'][Graha::KEY_KE] = ['longitude' => $longitudeKe, 'latitude' => $dataParams['graha'][Graha::KEY_RA]['latitude'], 'speed' => $dataParams['graha'][Graha::KEY_RA]['speed'], 'rashi' => $units['units'], 'degree' => $units['parts'], 'ascension' => $ascensionKe, 'declination' => $dataParams['graha'][Graha::KEY_RA]['declination']]; } return $dataParams; }
/** * Arudha calculation. * * @param string $key Arudha key * @param null|array $options Options to set (optional) * @return array * @throws Exception\InvalidArgumentException */ public function getArudha($key, array $options = null) { $this->checkData(); if (!array_key_exists($key, self::$arudha)) { throw new Exception\InvalidArgumentException("Arudha with the key '{$key}' does not exist."); } if ($key == self::KEY_AL) { $bhavaKey = 1; } elseif ($key == self::KEY_UL) { $bhavaKey = 12; } else { $bhavaKey = substr($key, 1); } $Bhava = Bhava::getInstance($bhavaKey)->setEnvironment($this->Data); $bhavaRuler = $Bhava->getRuler(); $lngRuler = $this->getData()['graha'][$bhavaRuler]['longitude']; $lngBhava = $this->getData()['bhava'][$bhavaKey]['longitude']; $lngDiff = $lngRuler - $lngBhava; $lngArudha = $lngRuler + $lngDiff; if ($lngArudha >= 360) { $lngArudha = $lngArudha - 360; } elseif ($lngArudha < 0) { $lngArudha = 360 + $lngArudha; } $unitArudha = Math::partsToUnits($lngArudha); $rashiArudha = $unitArudha['units']; if ($this->optionUseException) { if (Math::inRange($lngDiff, 0 - $this->optionExceptionRang, $this->optionExceptionRang) || Math::inRange(abs($lngDiff), 90 - $this->optionExceptionRang, 90 + $this->optionExceptionRang)) { $rashiArudha = Math::numberInCycle($unitArudha['units'], 10); $lngArudha = ($rashiArudha - 1) * 30 + $unitArudha['parts']; } } return ['longitude' => $lngArudha, 'rashi' => $rashiArudha, 'degree' => $unitArudha['parts']]; }
/** * Get Local Sidereal Time. * * @param DateTime $DateTime Date * @param Locality $Locality Locality * @return float In hours */ public static function getLST(DateTime $DateTime, Locality $Locality) { $hour = $DateTime->format('G'); $minute = $DateTime->format('i'); $second = $DateTime->format('s'); $jc = Time::getJC($DateTime); $gst = 24110.54841 + 8640184.812866 * $jc + 0.09310400000000001 * $jc ** 2 - 6.2E-6 * $jc ** 3; $units = Math::partsToUnits($gst, 86400); $hourS0 = $units['parts'] / 3600; $hourLng = $Locality->getLongitude() / 15; $hourOffset = $DateTime->getOffset() / 3600; $hourUT = $hour + $minute / 60 + $second / 3600 - $hourOffset; $lst = $hourS0 + $hourLng + $hourUT * 1.002737909350795; $result = $lst >= 24 ? $lst -= 24 : $lst; return $result; }
/** * Upaketu calculation. * * @return array * @see Mantreswara. Phaladeepika. Chapter 25, Verse 5. */ public function getUk() { if (!isset($this->temp[self::KEY_UK])) { $result = $this->getIn()['longitude'] + 16 + 2 / 3; $lng = $result > 360 ? $result - 360 : $result; $unit = Math::partsToUnits($lng); $this->temp[self::KEY_UK] = ['longitude' => $lng, 'rashi' => $unit['units'], 'degree' => $unit['parts']]; } return $this->temp[self::KEY_UK]; }