Files
PAA/astro_functions.php
2026-03-09 07:00:01 +05:45

118 lines
3.2 KiB
PHP

<?php
require_once 'constants.php';
function getPlanetName(string $planetKey, string $mode = NAME_MODE_MODERN): string
{
return PLANET_NAMES[$mode][$planetKey] ?? $planetKey;
}
function getPlanetShortName(string $planetKey): string
{
return PLANET_SHORT_NAMES[$planetKey] ?? strtoupper(substr($planetKey, 0, 2));
}
function getSignName(string $signKey, string $mode = NAME_MODE_MODERN): string
{
return SIGN_NAMES[$mode][$signKey] ?? $signKey;
}
function getNakshatraName(string $nakshatraKey, string $mode = NAME_MODE_MODERN): string
{
return NAKSHATRA_NAMES[$mode][$nakshatraKey] ?? $nakshatraKey;
}
function getSignKeyByIndex(int $index): string
{
return SIGN_KEYS[$index] ?? SIGN_KEYS[0];
}
function getNakshatraKeyByIndex(int $index): string
{
return NAKSHATRA_KEYS[$index] ?? NAKSHATRA_KEYS[0];
}
function formatDegree(float $degree): string
{
$deg = floor($degree);
$minutesFloat = ($degree - $deg) * 60;
$min = floor($minutesFloat);
$sec = floor(($minutesFloat - $min) * 60);
return $deg . ' deg ' . str_pad((string)$min, 2, '0', STR_PAD_LEFT) . "' " .
str_pad((string)$sec, 2, '0', STR_PAD_LEFT) . '"';
}
function normalizeLongitude(float $longitude): float
{
$result = fmod($longitude, 360);
if ($result < 0) {
$result += 360;
}
return $result;
}
function getSignIndexFromLongitude(float $longitude): int
{
$longitude = normalizeLongitude($longitude);
return (int) floor($longitude / 30);
}
function getSignKeyFromLongitude(float $longitude): string
{
$signIndex = getSignIndexFromLongitude($longitude);
return getSignKeyByIndex($signIndex);
}
function getDegreeWithinSign(float $longitude): float
{
$longitude = normalizeLongitude($longitude);
return fmod($longitude, 30);
}
function getNakshatraIndexFromLongitude(float $longitude): int
{
$longitude = normalizeLongitude($longitude);
$nakshatraSize = 360 / 27;
return (int) floor($longitude / $nakshatraSize);
}
function getNakshatraKeyFromLongitude(float $longitude): string
{
$nakshatraIndex = getNakshatraIndexFromLongitude($longitude);
return getNakshatraKeyByIndex($nakshatraIndex);
}
function buildPlanetDataFromLongitude(
string $planetKey,
float $longitude,
int $segment,
string $mode = NAME_MODE_MODERN
): array {
$signKey = getSignKeyFromLongitude($longitude);
$nakshatraKey = getNakshatraKeyFromLongitude($longitude);
$degreeWithinSign = getDegreeWithinSign($longitude);
return [
'key' => $planetKey,
'name' => getPlanetName($planetKey, $mode),
'short' => getPlanetShortName($planetKey),
'house' => $segment,
'longitude' => normalizeLongitude($longitude),
'sign_key' => $signKey,
'sign' => getSignName($signKey, $mode),
'degree_value' => $degreeWithinSign,
'degree' => formatDegree($degreeWithinSign),
'nakshatra_key' => $nakshatraKey,
'nakshatra' => getNakshatraName($nakshatraKey, $mode)
];
}
function sortPlanetsByLongitude(array $planets): array
{
usort($planets, function ($a, $b) {
return ($a['longitude'] ?? 0) <=> ($b['longitude'] ?? 0);
});
return $planets;
}