Sun Path Geometry for Solar: Tilt, Azimuth and Row Spacing from First Principles

How the sun moves, how that fixes the best tilt, and how far apart to put rows, derived step by step with Tirupati numbers you can check yourself.

Rows of solar modules at a low tilt on a flat concrete terrace roof, with short morning shadows falling behind each row
Row spacing, tilt and parapet setbacks all come from one calculation: where the sun is on the worst winter day.

Four sun-path facts for Tirupati

  • At 13.63° N the sun at solar noon stands 52.9° above the horizon on 21 December and 76.4° at the equinoxes. Around 21 June it is 80.2° up but to the north of you.
  • Solar noon in Tirupati falls between about 11:56 and 12:26 on an IST clock. The 82.5° E reference meridian adds 12.3 minutes, and the equation of time moves it by −14 to +16 minutes.
  • Under a clear-sky beam model, every south-facing tilt from 5° to 20° is within 1% of the 13.6° yield. Flat panels lose about 2.2%, so wind, cleaning and row spacing decide the tilt.
  • Modules 2.28 m long at 10° tilt need a 2.64 m row pitch to stay unshaded from 9:00 to 15:00 on 21 December. That is a ground coverage ratio of 0.86.

A flat-roof layout drawing carries numbers that look arbitrary: a tilt of 10°, a row pitch of 2.7 m, a 1.2 m setback from the parapet. Each follows from where the sun is on a given day and hour, and that can be calculated from latitude, date and time with a few trigonometric formulas.

This guide builds those formulas from first principles. We fix the conventions first, derive the sun's altitude and azimuth from one vector dot product, and from it get day length, the angle at which light meets a tilted module, the effect of tilt on annual beam energy and the spacing between rows. The worked examples use Tirupati (about 13.63° N, 79.42° E) and every figure was computed in Python. For the energy side, continue to our guide to solar energy yield and performance ratio.

Angles, symbols and sign conventions

Solar geometry usually goes wrong through sign conventions, not trigonometry. They are fixed here, and every symbol is defined before use.

  • φ\varphi is the latitude in degrees, positive north. For Tirupati, φ=13.63∘\varphi = 13.63^{\circ}.
  • LlocL_{\text{loc}} is the site longitude in degrees east (79.42° for Tirupati). LstL_{\text{st}} is the reference meridian of the time zone: 82.5° E for Indian Standard Time (IST).
  • nn is the day number of the year, with 1 January as 1.
  • δ\delta is the solar declination in degrees: the angle between the sun's rays and the equatorial plane, positive when the sun is north of the equator.
  • ω\omega is the hour angle in degrees: zero at solar noon, negative before it, positive after it, changing 15° every hour.
  • α\alpha is the solar altitude above the horizontal. The zenith angle is θz=90∘−α\theta_z = 90^{\circ} - \alpha.
  • γs\gamma_s is the solar azimuth from due south, east negative and west positive. A south-east sun has γs\gamma_s near −45°. Add 180° for a compass bearing.
  • β\beta is the module tilt from horizontal and γ\gamma the azimuth it faces, with the same signs as γs\gamma_s. A module facing due south has γ=0∘\gamma = 0^{\circ}.
  • θ\theta is the angle of incidence between a sun ray and the perpendicular (normal) to the module.

We assume a point sun with parallel rays, no atmospheric bending (under 0.6° even at the horizon) and a flat, level roof. The resulting angles are accurate to a fraction of a degree.

Why the sun's path changes: declination

The Earth's axis is tilted about 23.44° from the perpendicular to its orbit and points in a nearly fixed direction in space, so over a year the sun moves north and south of the equatorial plane. On about 20 March and 23 September δ=0∘\delta = 0^{\circ}; on 21 June δ=+23.44∘\delta = +23.44^{\circ}; on 21 December δ=−23.44∘\delta = -23.44^{\circ}. Cooper's approximation (1969) gives it from the day number alone:

δ=23.45∘sin⁡[360∘(284+n)365]\delta = 23.45^{\circ}\,\sin\!\left[\frac{360^{\circ}\,(284+n)}{365}\right]

The sine captures the smooth annual swing and the 284-day offset puts the zero crossing at the March equinox. Against the NOAA astronomical series, the largest difference over the year is 0.98°, in mid-October, so treat it as good to about a degree.

Worked example. For 16 October, n=289n = 289. The angle inside the sine is 360∘×573/365=565.15∘360^{\circ}\times 573/365 = 565.15^{\circ}, which is 205.15∘205.15^{\circ} after removing one full turn. Then sin⁡205.15∘=−0.4250\sin 205.15^{\circ} = -0.4250, so:

δ=23.45∘×(−0.4250)=−9.97∘\delta = 23.45^{\circ}\times(-0.4250) = -9.97^{\circ}

The sun is about 10° south of the equator, as expected a few weeks after the September equinox. NOAA gives −8.99°, which is the one-degree error mentioned. Tirupati's latitude is 13.63° N, so the sun is directly overhead at noon twice a year, when δ=φ\delta = \varphi: around 27 April and 15 August. Between those dates the noon sun is north of you, which matters for water-tank shadows later.

Solar time versus clock time

Solar time is set by the sun, with noon when it crosses your meridian. Your clock shows standard time for a whole country. Define tclockt_{\text{clock}} and tsolart_{\text{solar}} as clock and solar time in minutes after midnight, and EE as the equation of time in minutes, the difference between apparent and uniform mean time. Then:

tsolar=tclock+4(Lloc−Lst)+Et_{\text{solar}} = t_{\text{clock}} + 4\,(L_{\text{loc}} - L_{\text{st}}) + E

The factor 4 arises because the Earth turns 15° per hour, which is 4 minutes per degree. Tirupati is 3.08° west of the 82.5° E meridian, so the longitude term is 4×(79.42−82.5)=−12.324\times(79.42-82.5) = -12.32 minutes: solar noon comes 12.32 minutes after clock noon before the second correction.

The equation of time arises because the orbit is an ellipse and the axis is tilted. Spencer's approximation (1971) uses an angle BB that advances about 1° a day:

B=360∘(n−1)365B = \frac{360^{\circ}\,(n-1)}{365}
E=229.18(0.000075+0.001868cos⁡B−0.032077sin⁡B−0.014615cos⁡2B−0.04089sin⁡2B)\begin{aligned} E = 229.18\,\bigl(&0.000075 + 0.001868\cos B - 0.032077\sin B \\ &- 0.014615\cos 2B - 0.04089\sin 2B\bigr) \end{aligned}

The result is in minutes (229.18 is 1440 minutes divided by 2π2\pi). Against NOAA it stays within about 0.8 minutes all year.

Setting tsolar=12:00t_{\text{solar}} = 12{:}00 gives the clock time of solar noon:

tnoon=12:00−4(Lloc−Lst)−Et_{\text{noon}} = 12{:}00 - 4\,(L_{\text{loc}} - L_{\text{st}}) - E

Worked example, 16 October. With n=289n = 289, B=284.05∘B = 284.05^{\circ} and E=+14.62E = +14.62 minutes. Then tnoon=12:00+12.32−14.62t_{\text{noon}} = 12{:}00 + 12.32 - 14.62 min, which is 11:57:42 IST. A clock reading of 10:00 IST is a solar time of 600−12.32+14.62=602.30600 - 12.32 + 14.62 = 602.30 minutes, or 10:02:18, so the hour angle is

ω=15∘/h×(10.0384h−12h)=−29.42∘\omega = 15^{\circ}/\mathrm{h}\times(10.0384\,\mathrm{h} - 12\,\mathrm{h}) = -29.42^{\circ}

The negative sign confirms that this is before solar noon. The table repeats the calculation for other dates.

Date Equation of time E (min) Solar noon (IST clock)
11 February−14.212:26:32
20 March−8.212:20:29
21 June−1.312:13:39
16 October+14.611:57:42
3 November+16.411:55:57
21 December+2.212:10:09

A shading study quoted in IST hours must apply both corrections, since 30 minutes of error moves the sun by 7.5°. Our Tirupati solar guide covers the local climate and approvals.

Solar altitude and azimuth from vectors

We want the altitude α\alpha from latitude, declination and hour angle. The cleanest route uses unit vectors (arrows of length 1). Use an Earth-fixed frame: zz along the rotation axis towards the north pole, xx from the Earth's centre to where the observer's meridian crosses the equator, and yy towards the east. The local vertical makes angle φ\varphi with the equatorial plane and has no east component. The sun makes angle δ\delta with that plane and lies ω\omega west of the meridian, so in the morning (negative ω\omega) it has a positive east component. That gives:

𝐮^=(cos⁡φ0sin⁡φ),𝐬^=(cos⁡δcos⁡ω−cos⁡δsin⁡ωsin⁡δ)\hat{\mathbf{u}} = \begin{pmatrix} \cos\varphi \\ 0 \\ \sin\varphi \end{pmatrix}, \qquad \hat{\mathbf{s}} = \begin{pmatrix} \cos\delta\cos\omega \\ -\cos\delta\sin\omega \\ \sin\delta \end{pmatrix}

Here 𝐮^\hat{\mathbf{u}} points up and 𝐬^\hat{\mathbf{s}} points to the sun. The dot product of two unit vectors is the cosine of the angle between them, and that angle is the zenith angle, with cos⁡θz=sin⁡α\cos\theta_z = \sin\alpha. So:

sin⁡α=𝐬^⋅𝐮^=sin⁡φsin⁡δ+cos⁡φcos⁡δcos⁡ω\sin\alpha = \hat{\mathbf{s}}\cdot\hat{\mathbf{u}} = \sin\varphi\sin\delta + \cos\varphi\cos\delta\cos\omega

At solar noon (ω=0\omega = 0) this reduces to α=90∘−φ+δ\alpha = 90^{\circ} - \varphi + \delta. At Tirupati on 21 December the noon altitude is 90−13.63−23.45=52.92∘90 - 13.63 - 23.45 = 52.92^{\circ}; at the equinoxes it is 76.37∘76.37^{\circ}.

For the azimuth we need the sun's south and west components. Dotting 𝐬^\hat{\mathbf{s}} with the local east vector (0,1,0)(0,1,0) and north vector (−sin⁡φ,0,cos⁡φ)(-\sin\varphi, 0, \cos\varphi), and reversing the sign of the east and north results, gives:

sS=sin⁡φcos⁡δcos⁡ω−cos⁡φsin⁡δsW=cos⁡δsin⁡ω\begin{aligned} s_S &= \sin\varphi\cos\delta\cos\omega - \cos\varphi\sin\delta \\ s_W &= \cos\delta\sin\omega \end{aligned}

These equal cos⁡α\cos\alpha times the cosine and sine of the azimuth. Dividing by cos⁡δ\cos\delta gives the working form, where atan2 is the two-argument arctangent that returns the correct quadrant:

γs=atan2⁡(sin⁡ω,sin⁡φcos⁡ω−cos⁡φtan⁡δ)\gamma_s = \operatorname{atan2}\bigl(\sin\omega,\; \sin\varphi\cos\omega - \cos\varphi\tan\delta\bigr)

Atan2 matters here: between late April and mid-August the noon sun at Tirupati is north of you, and an arcsine formula cannot tell a south-east sun from a north-east one.

Worked example. Take 16 October at 10:00 IST: ω=−29.42∘\omega = -29.42^{\circ}, δ=−9.97∘\delta = -9.97^{\circ}, φ=13.63∘\varphi = 13.63^{\circ}. Then sin⁡φ=0.2357\sin\varphi = 0.2357, cos⁡φ=0.9718\cos\varphi = 0.9718, cos⁡δ=0.9849\cos\delta = 0.9849, cos⁡ω=0.8710\cos\omega = 0.8710, and

sin⁡α=0.2357×(−0.1731)+0.9718×0.9849×0.8710=0.7929\sin\alpha = 0.2357\times(-0.1731) + 0.9718\times 0.9849\times 0.8710 = 0.7929

so α=52.46∘\alpha = 52.46^{\circ} and θz=37.54∘\theta_z = 37.54^{\circ}. For the azimuth, sin⁡ω=−0.4913\sin\omega = -0.4913 and sin⁡φcos⁡ω−cos⁡φtan⁡δ=0.2053+0.1708≈0.376\sin\varphi\cos\omega - \cos\varphi\tan\delta = 0.2053 + 0.1708 \approx 0.376, so γs=−52.57∘\gamma_s = -52.57^{\circ}: a compass bearing of 127.4°, south-east. A south-east sun about 52° up at 10 in the morning in mid-October is what you would expect.

Sunrise, sunset and day length

At sunrise and sunset α=0\alpha = 0. Writing ωs\omega_s for the sunset hour angle in degrees, the altitude equation gives

cos⁡ωs=−tan⁡φtan⁡δ\cos\omega_s = -\tan\varphi\tan\delta

The sun is up from −ωs-\omega_s to +ωs+\omega_s, and at 15° per hour the day length TdT_d in hours is

Td=2ωs15∘/hT_d = \frac{2\,\omega_s}{15^{\circ}/\mathrm{h}}

This holds when |tan⁡φtan⁡δ|<1|\tan\varphi\tan\delta| \lt 1, always true in India. For Tirupati tan⁡φ=0.2425\tan\varphi = 0.2425. On 21 December tan⁡δ=−0.4338\tan\delta = -0.4338, so cos⁡ωs=0.1052\cos\omega_s = 0.1052, ωs=83.96∘\omega_s = 83.96^{\circ} and Td=2×83.96/15=11.19T_d = 2\times 83.96/15 = 11.19 h (11 h 12 min). The table uses the idealised δ=0∘\delta = 0^{\circ} and ±23.45∘\pm 23.45^{\circ}. The refraction column allows for atmospheric bending and the sun's disc, which add about 7 to 8 minutes.

Date Declination δ cos ωs ωs Geometric day length With refraction Sunrise (solar time)
21 December−23.45°+0.105283.96°11.19 h (11 h 12 min)11.32 h (11 h 19 min)06:24
Equinox0°0.000090.00°12.00 h (12 h 00 min)12.11 h (12 h 07 min)06:00
21 June+23.45°−0.105296.04°12.81 h (12 h 48 min)12.93 h (12 h 56 min)05:36

Sanity check: the equinox day is 12 hours at any latitude. Summer and winter differ by only 1.6 hours at Tirupati, so the season changes the sun's height far more than the day length.

Tilted surfaces and the angle of incidence

A beam of 1 m² cross-section hitting a module at angle θ\theta from the normal spreads over 1/cos⁡θ1/\cos\theta square metres, so each square metre receives cos⁡θ\cos\theta times the intensity. With GbnG_{bn} the beam irradiance on a surface square to the sun, in W/m², the beam power per unit module area is

Gb,plane=Gbncos⁡θG_{b,\text{plane}} = G_{bn}\cos\theta

This is the cosine loss: 86.6% of the full beam at θ=30∘\theta = 30^{\circ}, 50% at 60∘60^{\circ}. In local south, west and up coordinates the sun is (cos⁡αcos⁡γs, cos⁡αsin⁡γs, sin⁡α)(\cos\alpha\cos\gamma_s,\ \cos\alpha\sin\gamma_s,\ \sin\alpha) and the module normal is (sin⁡βcos⁡γ, sin⁡βsin⁡γ, cos⁡β)(\sin\beta\cos\gamma,\ \sin\beta\sin\gamma,\ \cos\beta). Their dot product gives the general formula:

cos⁡θ=cos⁡βsin⁡α+sin⁡βcos⁡αcos⁡(γs−γ)\cos\theta = \cos\beta\sin\alpha + \sin\beta\cos\alpha\cos(\gamma_s - \gamma)

It holds while the sun is above the horizon and cos⁡θ>0\cos\theta \gt 0; a negative value means the sun is behind the module and the beam contribution is zero.

The equivalent-latitude shortcut for south-facing modules

For a south-facing module there is a neater route. Tilting it by β\beta turns its normal from the local vertical (cos⁡φ,0,sin⁡φ)(\cos\varphi, 0, \sin\varphi) towards the equator, giving (cos⁡(φ−β),0,sin⁡(φ−β))(\cos(\varphi-\beta), 0, \sin(\varphi-\beta)): the vertical of a site at latitude φ−β\varphi-\beta. Dotting with 𝐬^\hat{\mathbf{s}}:

cos⁡θ=sin⁡(φ−β)sin⁡δ+cos⁡(φ−β)cos⁡δcos⁡ω\cos\theta = \sin(\varphi-\beta)\sin\delta + \cos(\varphi-\beta)\cos\delta\cos\omega

This is the altitude formula with φ\varphi replaced by φ−β\varphi-\beta. A tilt equal to the latitude makes the equivalent latitude zero, so cos⁡θ=cos⁡δcos⁡ω\cos\theta = \cos\delta\cos\omega and the noon angle of incidence is |δ||\delta|, never above 23.45°.

Worked example. Same instant as before (16 October, 10:02 solar time), with β=13.6∘\beta = 13.6^{\circ} so φ−β=0.03∘\varphi - \beta = 0.03^{\circ}. Then cos⁡θ≈cos⁡δcos⁡ω=0.9849×0.8710=0.858\cos\theta \approx \cos\delta\cos\omega = 0.9849\times 0.8710 = 0.858, θ=30.9∘\theta = 30.9^{\circ}. The flat surface has cos⁡θz=0.7929\cos\theta_z = 0.7929, so the tilted module collects 0.858/0.793=1.0820.858/0.793 = 1.082 times as much beam per square metre, about 8% more. The general formula with α=52.46∘\alpha = 52.46^{\circ} and γs=−52.57∘\gamma_s = -52.57^{\circ} returns the same 0.858.

At noon the seasonal effect is stronger. On 21 December a flat surface has cos⁡37.08∘=0.798\cos 37.08^{\circ} = 0.798 and the 13.6° module cos⁡23.48∘=0.917\cos 23.48^{\circ} = 0.917, a gain of 15.0%. On 21 June the sun is north of the zenith: flat gives cos⁡9.82∘=0.985\cos 9.82^{\circ} = 0.985 and tilted cos⁡23.42∘=0.918\cos 23.42^{\circ} = 0.918, a loss of 6.9%. A fixed tilt trades summer beam for winter beam.

Choosing the tilt angle

To compare tilts we sum the beam power on the plane over every daylight minute of the year. The model is deliberately simple:

  • Every day is clear and only beam light counts; diffuse light, clouds, temperature and soiling are ignored.
  • Beam irradiance square to the sun is Gbn=1.353×0.7AM0.678G_{bn} = 1.353\times 0.7^{\,AM^{0.678}} kW/m², a standard clear-sky relation. Here AM=1/sin⁡αAM = 1/\sin\alpha is the air mass, 1.353 an older value of the solar constant and 0.7 the transmittance per air mass.
  • Declination comes from Cooper's formula for each day nn, with one-minute steps and the sun counted above 1° altitude.
H=∑n=1365 ∫sunrisesunsetGbnmax⁡(cos⁡θ,0)dtH = \sum_{n=1}^{365}\ \int_{\text{sunrise}}^{\text{sunset}} G_{bn}\,\max(\cos\theta,\,0)\,dt

HH is the annual beam energy per square metre of south-facing plane, in kWh/m². The absolute values are a clear-sky ceiling, so only the ratios between tilts carry meaning. The last column, (1+cos⁡β)/2(1+\cos\beta)/2, is the share of isotropic sky-diffuse light a tilted plane keeps relative to a flat one.

Tilt β 21 Dec (kWh/m²/day) 21 Jun (kWh/m²/day) Annual H (kWh/m²) Versus 13.6° Diffuse factor
0°4.626.862,210−2.2%1.000
5°4.986.642,242−0.7%0.998
10°5.306.362,2580.0%0.992
13.6°5.516.142,2580.0%0.986
20°5.825.682,238−0.9%0.970
30°6.174.832,151−4.8%0.933

The curve is very flat. The model's maximum lies near 12°, about 1.6° below the latitude, and every tilt from 8° to 16° is within 0.3% of it. Moving from flat to 13.6° adds 2.2% a year, raises the 21 December total by 19% and lowers the 21 June total by about 11%. A 30° tilt gains 34% on 21 December, gives up 30% on 21 June and ends 4.8% behind on the year.

Why 10° to 15° is the usual rooftop choice

Because yield barely changes, other factors decide. A tilt of 8° to 10° or more lets rain wash dust off the glass, while lower tilts generally present less area to the wind and allow closer rows. Our Tirupati guide suggests 13° to 15° as a starting layout and our system sizing guide 12° to 15°.

This is a beam-only model: The true optimum depends on the diffuse share of light and on the cloud pattern of the south-west and north-east monsoons. Cloudier skies favour lower tilts, as the last column suggests. Use the table for the shape of the trade-off, and a site simulation with measured irradiance for yield claims.

Shadows and row spacing

On a flat roof each row must avoid shading by the row in front during the hours that produce most of the energy. Define ll as the module slant length in metres (the long side in portrait) and β\beta as the tilt. The top edge of a row then stands h=lsin⁡βh = l\sin\beta above its lower edge, and the row has horizontal depth lcos⁡βl\cos\beta. The row pitch PP is the north-south distance between the lower edges of successive rows.

Commercial rooftop solar installation with rows of panels
A commercial rooftop array. On a flat roof the gap between rows follows from the geometry worked out below.

The length of a shadow

A point at height hh casts its shadow along the sun's ray, which descends at angle α\alpha. By similar triangles the shadow on level ground has length L=h/tan⁡αL = h/\tan\alpha and points away from the sun. Resolving it along north and east with the solar azimuth:

L=htan⁡α,xN=Lcos⁡γs,xE=Lsin⁡γsL = \frac{h}{\tan\alpha}, \qquad x_N = L\cos\gamma_s, \qquad x_E = L\sin\gamma_s

xNx_N is how far north the shadow tip lands and xEx_E its offset to the east, negative (west) when the sun is in the east. In vector form xN=hsS/sin⁡αx_N = h\,s_S/\sin\alpha and xE=hsW/sin⁡αx_E = h\,s_W/\sin\alpha. A south-east or south-west sun spreads the length sideways, so the north reach is shorter than LL.

Pitch for no shading from 9:00 to 15:00

The top edge's shadow lands xNx_N north of it, and the next row's lower edge is P−lcos⁡βP - l\cos\beta north of that edge. For no shading the gap must be at least xNx_N at the worst moment:

P=lcos⁡β+hcos⁡γstan⁡α=l(cos⁡β+sin⁡βcos⁡γstan⁡α)P = l\cos\beta + \frac{h\cos\gamma_s}{\tan\alpha} = l\left(\cos\beta + \frac{\sin\beta\,\cos\gamma_s}{\tan\alpha}\right)

The reach is longest at the window edges, on the day the noon sun is lowest: the winter solstice. Using 9:00 to 15:00 solar time on 21 December is a common design rule, but it is a design choice, not a law of nature. In the beam model above, about 78% of the 21 December beam energy on a 10° plane arrives inside that window; the first and last hour may see some shading.

The ground coverage ratio, the fraction of the roof strip occupied by module area, is

GCR=lP\mathrm{GCR} = \frac{l}{P}

Worked example. Modules 2.28 m long in portrait at β=10∘\beta = 10^{\circ}, at Tirupati on 21 December. At 9:00, ω=−45∘\omega = -45^{\circ} and δ=−23.45∘\delta = -23.45^{\circ}. The altitude equation gives sin⁡α=−0.0938+0.6304=0.5367\sin\alpha = -0.0938 + 0.6304 = 0.5367, so α=32.46∘\alpha = 32.46^{\circ}. The azimuth is γs=−50.25∘\gamma_s = -50.25^{\circ}, so cos⁡γs=0.6395\cos\gamma_s = 0.6395. The height of the top edge is

h=2.28m×sin⁡10∘=0.396mh = 2.28\,\mathrm{m}\times\sin 10^{\circ} = 0.396\,\mathrm{m}

The shadow length is L=0.396/tan⁡32.46∘=0.396/0.6360=0.6225L = 0.396/\tan 32.46^{\circ} = 0.396/0.6360 = 0.6225 m, and its north reach is xN=0.6225×0.6395=0.398x_N = 0.6225\times 0.6395 = 0.398 m. The depth of the row is 2.28cos⁡10∘=2.2452.28\cos 10^{\circ} = 2.245 m. Then:

P=2.245m+0.398m=2.643m,GCR=2.282.643=0.863P = 2.245\,\mathrm{m} + 0.398\,\mathrm{m} = 2.643\,\mathrm{m}, \qquad \mathrm{GCR} = \frac{2.28}{2.643} = 0.863

At 12:00 the reach is only 0.299 m, so the window edges do set the pitch. Errors in δ\delta matter little: Cooper's value is accurate to 0.01° on 21 December, and even a full degree would change this pitch by under 2 cm. The table repeats the calculation for other tilts (2.28 m modules, 9:00 to 15:00).

Tilt β Top-edge height h (m) Row depth l cos β (m) Shadow reach (m) Pitch P (m) GCR
5°0.1992.2710.2002.4710.923
10°0.3962.2450.3982.6430.863
13.6°0.5362.2160.5392.7550.828
15°0.5902.2020.5932.7960.816
20°0.7802.1430.7842.9270.779

Each extra 5° of tilt costs about 0.13 to 0.17 m of pitch. The window matters too. At 10° tilt, 10:00 to 14:00 needs a 2.58 m pitch (GCR 0.884), 9:00 to 15:00 needs 2.64 m (0.863) and 8:00 to 16:00 needs 2.80 m (0.814). Yield is flat across tilts but pitch is not, so a lower tilt packs more modules into a roof.

For scale, an illustrative 1.13 m wide, 550 W module at this pitch takes 3.00 m² of roof strip, or 5.4 m² per kWp (about 59 sq ft). That is the bare array field; the 80 to 100 sq ft per kW rule in our sizing guide also covers walkways and setbacks. Use your own datasheet.

Shading is not all-or-nothing: A shadow on a module's lower edge does not switch it off, because bypass diodes isolate shaded cell groups. The loss depends on the module's internal layout and orientation; see our guide to modules, bypass diodes and the I-V curve.

Parapets and water tanks on a terrace

The same shadow formulas apply to any obstruction. For one of height HH above the roof, with the lower edge of the nearest module raised z0z_0 above the roof, the module is shade-free at distance dd north of it if

d=(H−z0)cos⁡γstan⁡αd = \frac{(H - z_0)\cos\gamma_s}{\tan\alpha}

This is the pitch equation with H−z0H - z_0 in place of hh. It is conservative, since the module surface rises away from its lower edge, the hardest point to clear.

A 1 m parapet

Take a 1 m parapet on the south edge and a module lower edge at roof level (z0=0z_0 = 0). On 21 December the formula gives 1.005 m at 9:00 and 15:00, 0.846 m at 10:00 and 14:00, 0.776 m at 11:00 and 13:00 and 0.756 m at noon. The first row therefore starts about 1.0 m north of the parapet. Raising the lower edge 0.3 m cuts the setback to about 0.70 m. East and west parapets behave differently: at 9:00 the shadow of a 1 m wall reaches 1.209 m westward (xEx_E), so keep about 1.2 m clear of the east parapet in the morning and of the west parapet at 15:00.

A 1.8 m water tank

A 1.8 m tank is more serious. On 21 December its shadow tip lies 1.81 m north and 2.18 m west at 9:00, 1.36 m north at noon, and 1.81 m north and 2.18 m east at 15:00. Anything in that fan, plus the tank's width, is shaded at some hour. Around 21 June the noon sun is north of the zenith and the shadow falls south, only 0.31 m long at noon and 0.58 m at 9:00. So put the tank on the north side of the array: its winter shadow then points away from the modules and its summer shadow is short.

Electrically, a shadow on one module can limit the current of its whole string, so a shade survey should give measured heights, a plotted shadow envelope for the design window and strings assigned so that shaded modules sit together. Take measurements from safe positions away from unprotected terrace edges, and remember that PV strings are live whenever light falls on them.

Using this on your own roof

The workflow is short. Fix a tilt of 10° to 15°, compute the winter-solstice altitude and azimuth at the edges of your window (32.46° and 50.25° at 9:00 and 15:00 in Tirupati), add the shadow reach of the top edge to the row depth for the pitch, and check each obstruction with the setback formula. A ten-line script reproduces every table here.

These are first-order results; real designs add walkways, wind and structural limits and a loss simulation. If you would like this done for your own terrace, with the shadow envelope of your tank and parapets drawn on a layout, book a free power audit with Ray2Volt.

Frequently asked questions

What is the best tilt angle for solar panels in Tirupati?

Under a clear-sky beam model, the annual maximum for a fixed south-facing plane at Tirupati lies near 12 degrees, just below the 13.63 degree latitude. The curve is flat: every tilt from 8 to 16 degrees is within 0.3% of it. Designers therefore choose 10 to 15 degrees for rain cleaning, lower wind load and closer rows.

Why is solar noon not at 12:00 on my clock?

Indian Standard Time is set for the 82.5 degrees east meridian, while Tirupati is at 79.42 degrees east. At 4 minutes per degree, the sun crosses the Tirupati meridian 12.32 minutes after clock noon. The equation of time then adds between minus 14 and plus 16 minutes, so solar noon falls between about 11:56 and 12:26 IST.

How do I calculate the sun's height above the horizon?

Use sin(altitude) = sin(latitude) × sin(declination) + cos(latitude) × cos(declination) × cos(hour angle), with the hour angle at 15 degrees per hour from solar noon, negative in the morning. At Tirupati on 16 October at 10:02 solar time this gives 52.46 degrees.

How far apart should rows of solar panels be on a flat roof?

The pitch is module length × cos(tilt) plus the shadow reach of the top edge, module length × sin(tilt) × cos(azimuth) / tan(altitude). With 9:00 to 15:00 solar time on 21 December as the design window, a 2.28 m module at 10 degrees tilt needs a pitch of about 2.64 m, a ground coverage ratio of 0.86.

How much roof clearance does a parapet or water tank need?

Clearance is the obstruction height × cos(azimuth) / tan(altitude) at the sun position that sets your design window. For Tirupati on 21 December at 9:00 and 15:00, a 1 m parapet shades about 1.0 m to its north and a 1.8 m tank about 1.8 m to its north, plus up to 2.2 m sideways. Confirm heights with a site survey.

Ray2Volt Solar

Ray2Volt Solar Private Limited

We design, install, and service rooftop solar for homes and businesses across Tirupati district and Andhra Pradesh, from PM Surya Ghar residential systems to commercial and industrial plants. Every enquiry starts with a free power audit.

Get the shade and spacing checked on your roof

Send Ray2Volt your roof details. Our engineers can measure obstructions, plot the winter shadow envelope and propose a tilt and row pitch for your site.

Get a free quote Chat on WhatsApp