예제 #1
0
 /**
  * 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;
         }
     }
 }
예제 #2
0
파일: D12.php 프로젝트: mykitty/jyotish
 /**
  * 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;
 }
예제 #3
0
파일: D2.php 프로젝트: mykitty/jyotish
 /**
  * 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;
 }
예제 #4
0
파일: D3.php 프로젝트: mykitty/jyotish
 /**
  * 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;
 }
예제 #5
0
파일: D30.php 프로젝트: mykitty/jyotish
 /**
  * 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;
 }
예제 #6
0
파일: D20.php 프로젝트: mykitty/jyotish
 /**
  * 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;
 }
예제 #7
0
파일: D27.php 프로젝트: mykitty/jyotish
 /**
  * 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;
 }
예제 #8
0
파일: Ch.php 프로젝트: mykitty/jyotish
 /**
  * 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;
     }
 }
예제 #9
0
파일: Lagna.php 프로젝트: mykitty/jyotish
 /**
  * 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']];
 }
예제 #10
0
 /**
  * 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;
 }
예제 #11
0
파일: Swetest.php 프로젝트: kunjara/jyotish
 /**
  * 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;
 }
예제 #12
0
파일: Arudha.php 프로젝트: kunjara/jyotish
 /**
  * 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']];
 }
예제 #13
0
파일: Astro.php 프로젝트: mykitty/jyotish
 /**
  * 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;
 }
예제 #14
0
 /**
  * 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];
 }