- Udaya Lagna Calculator
- Udaya Lagna Calculator
Udaya Lagna Calculator -
cityInput.addEventListener('change', async () => const city = cityInput.value; if (city) const coords = await geocodeCity(city); if (coords) currentCoords = coords; latField.value = coords.lat.toFixed(4); lonField.value = coords.lon.toFixed(4); else latField.value = "Not found"; lonField.value = "Not found"; currentCoords = null; );
function getNakshatra(siderealDeg) // 27 Nakshatra each 13°20' = 13.3333333° const nakshatras = [ "Ashwini", "Bharani", "Krittika", "Rohini", "Mrigashira", "Ardra", "Punarvasu", "Pushya", "Ashlesha", "Magha", "Purva Phalguni", "Uttara Phalguni", "Hasta", "Chitra", "Swati", "Vishakha", "Anuradha", "Jyeshtha", "Mula", "Purva Ashadha", "Uttara Ashadha", "Shravana", "Dhanishtha", "Shatabhisha", "Purva Bhadrapada", "Uttara Bhadrapada", "Reverti" ]; let nakshatraLen = 360 / 27; // 13.3333333 let idx = Math.floor(siderealDeg / nakshatraLen); let startDeg = idx * nakshatraLen; let pada = Math.floor(((siderealDeg - startDeg) / (nakshatraLen / 4))) + 1; return `$nakshatras[idx] (Pada $pada)`; Udaya Lagna Calculator
// Compute ascendant using astronomia function computeAscendant(jd, lat, lon) // Get local sidereal time (LMST) const gmst = astronomia.siderealTime(jd); const lst = (gmst + lon / 15) % 24; // lon in degrees -> hours const ramc = lst * 15; // Right ascension of MC in degrees // formula for ascendant: tan(A) = sin(Θ) / (cos(Θ) sin(ε) + tan(φ) cos(ε)) // epsilon (obliquity) const epsilon = astronomia.obliquity(jd) * Math.PI/180; const latRad = lat * Math.PI/180; const ramcRad = ramc * Math.PI/180; const sinTheta = Math.sin(ramcRad); const cosTheta = Math.cos(ramcRad); const tanPhi = Math.tan(latRad); let numerator = sinTheta; let denominator = cosTheta * Math.sin(epsilon) + tanPhi * Math.cos(epsilon); let A = Math.atan2(numerator, denominator); let asc = A * 180 / Math.PI; if (asc < 0) asc += 360; // Ensure quadrant: ascendant should be in same quadrant as ramc + 90° let ramcQuadrant = Math.floor(ramc / 90) % 4; let ascQuadrant = Math.floor(asc / 90) % 4; while (ascQuadrant !== ramcQuadrant) asc += 90; if (asc >= 360) asc -= 360; ascQuadrant = Math.floor(asc / 90) % 4; return asc; cityInput