2
$\begingroup$

I have a closed region on the unit sphere expressed as a series of azimuth, elevation points $(\theta,\phi)_i$. I need to calculate the solid angle subtended by the enclosed region.

I know that the differential solid angle element in spherical coordinates is $d\Omega=\cos \phi \,d\phi\, d\theta$. This is usually written in terms of the polar angle where $pa=\pi/2-\phi$, and therefore $\sin pa = \cos \phi$.

It 'feels like' I should be able to find the area as a sum of the areas between each segment and the 'equator' -- i.e. a solid angle version of the 'Shoelace Formula'.

I have not been able to find this formulation and I haven't been able to build confidence in my attempts.

I believe the solid angle of a rectangular region bounded by $\theta \in[\theta_1,\theta_2]$ and $\phi \in[\phi_1,\phi_2]$ is $(\theta_2-\theta_1)(\cos \phi_2 - \cos \phi_1)$ (again, this equation is usually given in terms of polar angle, with a $\sin$ instead of the $\cos$.) I could use $\phi_1=0$ and use this equation to form a Riemann sum inspired approach to the area, but I feel I'm missing a correction on the elevation when the start/end elevation of the segment differs. I have not found an expression for the solid angle of a trapezoid in $(\theta,\phi)$ -- or equivalently the solid angle under a $(\theta,\phi)$ line segment.

Any help is appreciated.

$\endgroup$
0

3 Answers 3

2
$\begingroup$

The magnitude of the solid angle in steradians is:

$$ \Omega=\frac{A}{r^2} $$

where $A$ is the area of ​​the spherical region and $r$ is the radius of the sphere.

In the case of an spherical polygon:

$$ A=\left[\left(\begin{aligned}\sum_{k=1}^n\alpha_k\end{aligned}\right)-(n-2)\pi\right]r^2 $$

where $\alpha_k$ is the k-th radian angle.

Therefore, knowing the coordinates of the vertices in a counterclockwise direction:

$$ V_k=(r\cos\phi_k\cos\theta_k,\,r\cos\phi_k\sin\theta_k,\,r\sin\phi_k), \quad\text{with}\;(\phi_k,\theta_k)\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]\times[0,2\pi) $$

the angle between the normals to the planes on which two consecutive sides lie is:

$$ n_1\equiv\frac{V_k\times V_{k+1}}{||V_k\times V_{k+1}||},\quad n_2\equiv\frac{V_k\times V_{k-1}}{||V_k\times V_{k-1}||} \quad\Rightarrow\quad\beta_k=\arccos(n_1\cdot n_2) $$

which if the inequality is verified:

$$ (n_1\times n_2)\cdot V_k\ge 0 $$

we have $\alpha_k=\beta_k$, otherwise $\alpha_k=2\pi-\beta_k$.

$\endgroup$
1
$\begingroup$

The best option is to divide the region in triangles.

First of all we need to assume that the circular segment that join two points is part of a great circle.

That's the easiest assumption.

If the region is not convex, we can always add extra areas to be regarded as negative areas.

The area of a triangle on a unit sphere is simply (Girard's theorem): $$Area = A+B+C-\pi,$$ where $A,B,C$ are the angles between 2 points.

The angle between 2 points $p$ and $p'$ is given by $${\displaystyle {\begin{aligned}{A(p, p') }&={2 \arcsin \frac{1}{\sqrt{2}} \sqrt {1-\sin {\theta }\sin {\theta '}\cos {(\varphi -\varphi ')}-\cos {\theta }\cos {\theta '}}}\end{aligned}}}$$

For this last formula, check https://en.wikipedia.org/wiki/Spherical_coordinate_system#Distance_in_spherical_coordinates.

Once we have the distance between 2 points on a unit sphere, this is the chord on a great circle, a unit circle, and taking the angle is quite trivial: $2 \arcsin(D/2)$

$\endgroup$
2
  • $\begingroup$ I am fine with treating the poly-line segments as great circle arcs. However, I do need to handle non-convex areas. If the area calculation can result in a signed area, then we could form each triangle from a segment on the polyline connected to the 'origin' in (az,el). Then looping the polyline would work out. $\endgroup$ Commented May 22 at 15:46
  • $\begingroup$ Not sure how I missed it before, but the Wiki article on Spherical trig en.wikipedia.org/wiki/… lays out a polygon extension of Girard's theorem and also gives the spherical quadrangle equation I was looking for... $\endgroup$ Commented May 22 at 15:47
1
$\begingroup$

I ended up going with this approach from the Wikipedia article as it is very simple to implement.

It is based on the area of the canonical spherical trapezoid you would imagine if you were applying trapezoidal integration on a sphere.

$\tan (0.5\,\Omega_i) = \tan ( 0.5\, (\theta_{i+1} - \theta_i))\, \sin( 0.5 (\phi_{i+1} + \phi_i))\, /\, \cos( 0.5\, (\phi_{i+1} - \phi_i))$

This is a signed area, so it will handle non-convex polygons automatically. It will also handle overlapping polygons with holes in them if the orientation of the polygons is the opposite for holes.

$\endgroup$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.