Others

Birth chart equations

05 Mar 2026 | 11 min read | Dasa

How to Calculate a Complete Birth Chart from Scratch

Lagna (Ascendant), Rasi (D1), Navamsa (D9) & Vimshottari Dasha — with equations and diagrams

This post explains the full computational pipeline used by chart calculators:

  • Time conversion (IST → UTC)
  • Julian Day (JD)
  • Sidereal time (GMST → LST)
  • Obliquity of the ecliptic
  • Ascendant (Lagna) geometry and equation
  • Tropical → Sidereal conversion (Lahiri)
  • Rasi (D1), Nakshatra & Pada
  • Navamsa (D9)
  • Vimshottari Dasha + Bhukti schedule (100 years)

The emphasis here is on variables, equations, and how each value is computed.


Quick pipeline


1) Inputs and symbols

1.1 Birth inputs

Symbol Meaning Unit
Y,M,DY, M, D Gregorian year, month, day
h,mh, m Birth time in IST (hour, minute)
ϕ\phi Latitude (North positive) degrees
λgeo\lambda_{geo} Longitude (East positive) degrees

1.2 Derived time variables

Symbol Meaning Unit
UTCUTC Universal Time hours / datetime
JDJD Julian Day days
TT Julian centuries since J2000.0 centuries
GMSTGMST Greenwich mean sidereal time degrees
LSTLST Local sidereal time degrees
ϵ\epsilon Obliquity of ecliptic degrees

1.3 Longitudes

Symbol Meaning Unit
λtrop\lambda_{trop} Tropical ecliptic longitude degrees
AA Lahiri ayanamsa degrees
λsid\lambda_{sid} Sidereal ecliptic longitude (Lahiri) degrees
λAsc\lambda_{Asc} Ascendant longitude degrees

2) Time conversion (IST → UTC)

India Standard Time is UTC+05:30, so:

UTC=IST5.5 hoursUTC = IST - 5.5 \text{ hours}

(If your inputs are IST, you must convert before astronomical calculations.)


3) Julian Day (JD)

A convenient form (if you already have a UTC Date):

JD=tUTC86400+2440587.5JD = \frac{t_{UTC}}{86400} + 2440587.5

where:

  • tUTCt_{UTC} is the time in seconds since Unix epoch (1970-01-01 00:00:00 UTC)
  • 86400 is seconds per day

JD is the master clock for the rest of the pipeline.


4) Sidereal time (GMST → LST)

4.1 Julian centuries

T=JD2451545.036525T = \frac{JD - 2451545.0}{36525}

4.2 Greenwich Mean Sidereal Time (degrees)

GMST=280.46061837+360.98564736629(JD2451545)+0.000387933T2T338710000\begin{array} {l} GMST = \\\\ 280.46061837 \\\\ + 360.98564736629 (JD - 2451545) \\\\ + 0.000387933T^2 \\\\ - \frac{T^3}{38710000} \\\\ \end{array}

Normalize to [0,360][0, 360] degrees.

4.3 Local Sidereal Time

LST=GMST+λgeoLST = GMST + \lambda_{geo}

Normalize to [0,360][0, 360] degrees.


5) Obliquity of the ecliptic

Using a standard Meeus-style approximation (arcseconds):

ϵ=84381.44846.8150T0.00059T2+0.001813T3\epsilon'' = 84381.448 - 46.8150T - 0.00059T^2 + 0.001813T^3

Convert to degrees:

ϵ=ϵ3600\epsilon = \frac{\epsilon''}{3600}


6) Lagna (Ascendant): geometry + equation

6.1 What Lagna is (geometrically)

Lagna is the ecliptic longitude rising on the eastern horizon at the birth location and birth moment.

It is the intersection of:

  • the ecliptic plane (zodiac belt), and
  • the local horizon plane, specifically the eastern intersection.

This is why Lagna depends strongly on latitude and time.


6.2 SVG diagram: Lagna geometry (horizon–ecliptic intersection)

The Ascendant (Lagna) is defined as the point where the ecliptic — the apparent path of the Sun and zodiac — intersects the eastern horizon at a specific time and location on Earth.

Due to Earth’s rotation, the zodiac appears to move westward across the sky. As a result, different zodiac degrees rise on the eastern horizon throughout the day approximately every two hours. The zodiac degree rising at the moment of birth is called the Lagna or Ascendant.

This is a conceptual diagram (not to scale). It shows the horizon plane cutting the ecliptic circle. The eastern intersection is the Ascendant (Lagna).

Side-view illustration of Lagna geometry. The Ascendant (Lagna) is the point where the zodiac, or ecliptic, intersects the eastern horizon at a given birth time and location. The opposite intersection on the western horizon is the Descendant.


6.3 Ascendant equation (tropical ecliptic longitude)

Let:

  • θ=LST\theta = LST (converted to radians)
  • ϕ\phi = latitude
  • ϵ\epsilon = obliquity

A robust form that selects the eastern intersection uses:

tan(λAsc)=cosθsinθcosϵtanϕsinϵ\tan(\lambda_{Asc}) = \frac{\cos\theta} {-\sin\theta \cos\epsilon - \tan\phi \sin\epsilon}

Implementation should use atan2 for quadrant correctness:

λAsc=atan2(cosθ,sinθcosϵtanϕsinϵ)\lambda_{Asc} = atan2(\cos\theta, \; -\sin\theta \cos\epsilon - \tan\phi \sin \epsilon)

Normalize λAsc\lambda_{Asc} to [0,360][0, 360].


7) Lahiri ayanamsa and sidereal longitudes

7.1 Lahiri ayanamsa

A(T)=AJ2000+5038.7784T1.07259T20.001147T33600A(T) = A_{J2000} + \frac{5038.7784T - 1.07259T^2 - 0.001147T^3}{3600}

with:

AJ2000=235124A_{J2000} = 23^\circ 51' 24''

7.2 Sidereal longitude

λsid=λtropA(T)\lambda_{sid} = \lambda_{trop} - A(T)

This applies to the Ascendant and each planet longitude (after you compute tropical ecliptic longitude).


8) Rasi (D1 chart)

Each sign spans 30°.

SignIndex=λsid30\text{SignIndex} = \left\lfloor \frac{\lambda_{sid}}{30} \right\rfloor

In a South Indian chart layout, sign locations are fixed. A standard indexing layout is:

[11] [ 0] [ 1] [ 2]
[10]           [ 3]
[ 9]           [ 4]
[ 8] [ 7] [ 6] [ 5]

where 0=Mēṣam (Aries), 1=Riṣapam, …, 11=Meenam.


9) Nakshatra and Pada

There are 27 nakshatras:

Δnak=36027=1320\Delta_{nak} = \frac{360}{27} = 13^\circ 20'

Nakshatra index:

N=λsidΔnakN = \left\lfloor \frac{\lambda_{sid}}{\Delta_{nak}} \right\rfloor

Each nakshatra has 4 padas:

Δpada=Δnak4=320\Delta_{pada} = \frac{\Delta_{nak}}{4} = 3^\circ 20'

Pada:

Pada=λsidNΔnakΔpada+1\text{Pada} = \left\lfloor \frac{\lambda_{sid} - N\Delta_{nak}}{\Delta_{pada}} \right\rfloor + 1


10) Navamsa (D9 chart)

Each sign is divided into 9 parts:

Δnav=309=320\Delta_{nav} = \frac{30}{9} = 3^\circ 20'

Within-sign longitude:

δ=λsidmod30\delta = \lambda_{sid} \; mod \; 30

Navamsa segment index:

n=δΔnavn = \left\lfloor \frac{\delta}{\Delta_{nav}} \right\rfloor

Navamsa sign mapping depends on the sign type:

  • Movable signs: start Navamsa from the same sign
  • Fixed signs: start from 9th sign
  • Dual signs: start from 5th sign

(Then advance nn signs forward.)


11) Vimshottari Dasha (100 years)

11.1 Dasha order and years

Vimshottari is a 120-year cycle:

  • Ketu (7), Venus (20), Sun (6), Moon (10), Mars (7), Rahu (18), Jupiter (16), Saturn (19), Mercury (17)

Total:

120 years120 \text{ years}

11.2 Starting Mahadasha from Moon’s nakshatra lord

Moon’s nakshatra index NN maps to the repeating 9-lord cycle. The lord at birth starts the Mahadasha.

11.3 Balance at birth

Let ff be the fraction of nakshatra completed by Moon:

f=λsidNΔnakΔnakf = \frac{\lambda_{sid} - N\Delta_{nak}}{\Delta_{nak}}

Balance (remaining years) for the starting lord with duration YlordY_{lord}:

Balance=(1f)Ylord\text{Balance} = (1-f)\,Y_{lord}

11.4 Bhukti (Antardasha) duration inside a Mahadasha

For a Mahadasha of length YMY_M, a sub-lord with duration YSY_S has Bhukti:

Ybhukti=YM×YS120Y_{bhukti} = Y_M \times \frac{Y_S}{120}

Generate a 100-year schedule by iterating Mahadashas forward from birth and expanding Bhuktis within each Mahadasha.


12) Accuracy notes

Small differences between websites happen due to:

  • Different ayanamsa models (exact Lahiri vs approximations)
  • Nutation / true obliquity vs mean obliquity
  • Different ephemeris engines (Swiss Ephemeris vs simplified formulas)
  • Calendar-add vs constant year-length when converting “years” to dates

If you want matching down to minutes with a specific reference site, the biggest lever is using the same ephemeris/ayanamsa convention and the same date addition convention for dashas.