Home Black Hole Image Simulation Black Hole Embedded Diagram Wormhole Embedded Diagram Research & Data FAQ

Chapter 3: Ray Tracing in the Schwarzschild Geometry

The Schwarzschild black hole is a spherically symmetric, non-rotating, charge-less black hole that was discovered by Karl Schwarzschild in 1915. For these reasons it is the simplest type of black hole. In this chapter we will derive the line metric of the empty space around this black hole’s body, followed by the equations of motion for photon’s trajectories around it. We will then write up a piece of code made in python that contains an algorithm that produces distorted images of these black holes.

3.1 The Schwarzschild Metric

The trajectory of photons around Schwarzschild black holes are governed by its line metric. This line metric is derived below using solutions of Einstein’s field equations. The work below has been based on Hobson’s book [2], chapter 99, Sections 11 and 22.

Because we are dealing with a spherically symmetric geometry, we use the spherical coordinate line metric form of Minkowski space, derived in the previous chapter. It now also consists of multiplying each of the terms by arbitrary coefficient functions of rr and tt to make this line metric unique to this Schwarzschild geometry, which are our metric functions, gαβg_{\alpha\beta}. So the line metric becomes ds2=A(r,t)dt2B(r,t)dr2C(r,t)r2(dθ2+sin2(θ)dϕ2)D(r,t)dtdr.ds^2 = A(r,t)dt^2-B(r,t)dr^2-C(r,t)r^2(d\theta^2+\sin^2 (\theta) d\phi^2) - D(r,t)dtdr.\ \label{2.1} The spherically symmetric geometry means that the only spatial coordinate that is affected by the gravitational field force is the radial coordinate, rr, so by taking a new coordinate system of r2r^2, it is found that the function C(r,t)=1C(r,t) =1. The line metric needs to be invariant under changing the time component from positive to negative, ttt \to -t, because the geometry is at rest. This causes the coefficient multiplied to drdtdrdt to equate to zero, hence we have D(r,t)=0D(r,t) = 0. This also requires our gαβg_{\alpha\beta} functions to be independent of the time-like coordinate, tt, turning the line metric into

ds2=A(r)dt2B(r)dr2r2(dθ2+sin2(θ)dϕ2).ds^2 = A(r)dt^2-B(r)dr^2-r^2(d\theta^2+\sin^2 (\theta) d\phi^2) .\ \label{2.2} The line metric now satisfies the form of a spacetime metric that is static spatially isotropic because all of its terms are invariant under rotation of its space-like coordinates and all of its terms, except for the time-like coordinate, are independent of time.

To find expressions of the functions A(r) and B(r)A(r) \text{ and } B(r) a unique solution of the Einstein’s equations needs to be determined. Starting with the Ricci tensor, we find that it vanishes in empty space because of the absence of matter, which only contains a gravitational field, so we have the Ricci tensor as Rab=0.\begin{aligned} R_{ab} &= 0.\\ \end{aligned} \label{2.2a} Equating the Riemann curvature equation with the Ricci tensor equation we obtain RabbΓacccΓabc+ΓaceΓebcΓabeΓecc,\begin{aligned} R_{ab} &\equiv \partial_b \Gamma^{c}_{ac} -\partial_c \Gamma^{c}_{ab} + \Gamma^{e}_{ac} \Gamma^{c}_{eb} - \Gamma^{e}_{ab} \Gamma^{c}_{ec},\\ \end{aligned} \label{2.2b} with our Christoffel symbol, Γabc\Gamma^{c}_{ab}, as before having a relation with the metric, gabg_{ab}, equation as Γβζη=12gηα(ζgαβ+βgαζαgβζ).\begin{aligned} \Gamma^{\eta}_{\beta\zeta} &= \frac{1}{2} g^{\eta\alpha} (\partial_{\zeta}g_{\alpha\beta}+ \partial_{\beta}g_{\alpha\zeta}- \partial_{\alpha}g_{\beta\zeta}).\\ \end{aligned} \label{2.2c} The calculus tensor method of solving the Einstein equations is done by directly calculating Γabc\Gamma^{c}_{ab} from our equation, using the values of gabg^{ab}, where we have our expressions of gabg_{ab} and gabg^{ab} taken directly from the line metric equation to give g00=A(r),g11=B(r),g22=r2,g33=r2sin2θ,g00=1/A(r),g11=1/B(r),g22=1/r2,g33=1/r2sin2θ.\begin{aligned} g_{00} &= A(r), & g_{11} &= -B(r) , & g_{22} &= -r^2, &g_{33} &= -r^2\sin^2\theta, \\ g^{00} &=1/A(r), &g^{11} &= -1/B(r) ,&g^{22} &=-1/r^2, &g^{33} &= -1/r^2\sin^2\theta.\\ \end{aligned} \label{2.2d} Using these values of gαβg^{\alpha\beta} and substituting them into equation gives the first non-zero Christoffel symbol, Γ010\Gamma^{0}_{01}, as Γ010=12g0α(1gα0+0gα1αg01)=12g00(1g00)=12A(r)1A(r)=A2A.\begin{aligned} \Gamma^{0}_{01} &= \frac{1}{2} g^{0\alpha} (\partial_{1}g_{\alpha0}+ \partial_{0}g_{\alpha1}- \partial_{\alpha}g_{01})=\frac{1}{2} g^{00} (\partial_{1}g_{00})= \frac{1}{2A(r)} \partial_1A(r) =\frac{A'}{2A}.\\ \end{aligned} \label{2.2da} Repeating this for all of the Christoffel symbols, we find that there are only 9 non-zero elements of the 40 independent connection coefficients, with them being Γ010=A/(2A),Γ001=A/(2B),Γ111=B/(2B),Γ221=r/(B),Γ331=r2sin2θ/(B),Γ122=1/r,Γ332=sinθcosθ,Γ133=1/r,Γ233=cotθ.\begin{aligned} \Gamma^{0}_{01} &= A'/(2A), &\Gamma^{1}_{00} &= A'/(2B), & \Gamma^{1}_{11} &= B'/(2B),\\ \Gamma^{1}_{22} &= -r/(B), &\Gamma^{1}_{33} &= -r^2 \sin^2 \theta/(B),& \Gamma^{2}_{12} &= 1/r,\\ \Gamma^{2}_{33} &= -\sin\theta\cos\theta,& \Gamma^{3}_{13} &= 1/r, & \Gamma^{3}_{23} &= \cot\theta.\\ \end{aligned} \label{2.2e} The Ricci tensors are then calculated tediously by substituting these Christoffel symbols into equation. Substituting in the relevant expressions gives the first Ricci tensor as R00=0Γ0αααΓ00α+Γ0αβΓβ0αΓ00βΓβαα,=1Γ001+Γ010Γ001Γ001(Γ111+Γ122+Γ133),=2AB+AB4B2+A2B+A2AA2BA2B(B2B+1r+1r),=A2B+A4B(AA+BB)ArB.\begin{aligned} R_{00} &= \partial_0 \Gamma^{\alpha}_{0\alpha} -\partial_\alpha \Gamma^{\alpha}_{00} + \Gamma^{\beta}_{0\alpha} \Gamma^{\alpha}_{\beta0} - \Gamma^{\beta}_{00} \Gamma^{\alpha}_{\beta\alpha} ,\\ &= -\partial_1 \Gamma^{1}_{00} + \Gamma^{0}_{01} \Gamma^{1}_{00} - \Gamma^{1}_{00}( \Gamma^{1}_{11}+ \Gamma^{2}_{12} + \Gamma^{3}_{13}),\\ & = \frac{-2A''B + A'B'}{4B^2} +\frac{A'}{2B'} +\frac{A'}{2A}\frac{A'}{2B} - \frac{A'}{2B}\left( \frac{B'}{2B}+ \frac{1}{r}+ \frac{1}{r}\right),\\ &= -\frac{A''}{2B} +\frac{A'}{4B} \left(\frac{A'}{A} + \frac{B'}{B}\right) - \frac{A'}{rB}.\\ \end{aligned} \label{2.2ea} All of the non-diagonal components of the Ricci tensors equations equate to zero, Rαβ=0R_{\alpha\beta}=0 when αβ\alpha \neq \beta, giving the diagonal terms as R00=A2B+A4B(AA+BB)ArB,R11=A2AA4A(AA+BB)BrB,R22=1B1+r2B(AABB),R33=R22sin2θ.\begin{aligned} R_{00} &= -\frac{A''}{2B} +\frac{A'}{4B} \left(\frac{A'}{A} + \frac{B'}{B}\right) - \frac{A'}{rB},\\ R_{11} &= \frac{A''}{2A} -\frac{A'}{4A} \left(\frac{A'}{A} + \frac{B'}{B}\right) - \frac{B'}{rB},\\ R_{22} &= \frac{1}{B} -1 +\frac{r}{2B} \left(\frac{A'}{A} - \frac{B'}{B}\right),\\ R_{33} &= R_{22} \sin^2\theta.\\ \end{aligned} \label{2.2f} Equating the Ricci tensor equations to zero as they are in an empty space and simplifying the terms, by adding BA(R00)+R11\frac{B}{A} (R_{00}) + R_{11} gives the following relation AB+AB=0,\begin{aligned} A'B + AB' &= 0,\\ \end{aligned} \label{2.2g} that proves that ABAB is constant. So we then set AB=αAB= \alpha where α\alpha is an arbitrary constant. Substituting B=αAB=\frac{\alpha}{A} into our expression for R22R_{22} in the equation above gives Aα1+rA2α(AAAA)=Aα1+rA2α(2AA)=0,α=A+rA,d(rA)dr=α.\begin{aligned} \frac{A}{\alpha} -1 +\frac{rA}{2\alpha} \left(\frac{A'}{A} - \frac{A}{A'}\right) &= \frac{A}{\alpha} -1 +\frac{rA}{2\alpha} \left(\frac{2A'}{A} \right) =0,\\ \alpha &= A+rA',\\ \Rightarrow \frac{d(rA)}{dr} &= \alpha.\\ \end{aligned} \label{2.2h} By integrating the last expression in the equation above we then get rA=α(r+k),\begin{aligned} rA&=\alpha(r+k),\\ \end{aligned} \label{2.2ha} where kk is a constant of integration. So we finally arrive at equations of the functions AA and BB as A(r)=α(1+kr),B(r)=(1+kr)1.\begin{aligned} A(r) &= \alpha \left( 1 + \frac{k}{r}\right) ,\\ B(r) &= \left( 1 + \frac{k}{r}\right)^{-1}.\\ \end{aligned} \label{2.2i}

Comparing equations above to that of equations of a weak-field, we see that the constant kk needs to represents the mass of an object that is causing the gravitational field, so we substitute kk with the Newtonian gravitational potential, Φ\Phi, so that k=2Φk=2\Phi and then we require

A(r)c21+2Φc2.\begin{aligned} \frac{A(r)}{c^2} &\to 1 + \frac{2\Phi}{c^2}.\\ \end{aligned} \label{2.2j} For a spherically symmetric mass, MM, and radial distance, rr, from the centre of the mass we have Φ=GM/r\Phi = -GM/r, hence the constant k=2GM/c2k = -2GM/c^2 and constant α=c2\alpha= c^2. Setting the usual constants to one with G=c=1G=c=1 the functions of rr then become

A(r)=12GMc2r=12Mr,B(r)=c2A(r)1=c212GMc2r=112Mr.\begin{aligned} A(r) &= 1-\frac{2GM}{c^2 r} = 1-\frac{2M}{ r},\\ B(r) &= c^2 A(r)^{-1} = \frac{c^2}{1-\frac{2GM}{c^2 r}} = \frac{1}{1-\frac{2M}{ r}}.\\ \end{aligned} \label{2.3} The geometry very far away from the black hole needs to tend towards the Minkowski line geometry, because at infinite distances away, the gravitational force of the black hole will tend to zero, hence as rr \to \infty then ds2ηαβ(x)dxαdxβds^2 \to \eta_{\alpha\beta}(x) dx^\alpha dx^\beta. This forces the functions A(r) and B(r)A(r) \text{ and } B(r) to tend to 11, with limrA(r)=c2=1\lim_{r \to \infty} A(r) = c^2 =1 and limrB(r)=1\lim_{r \to \infty} B(r) = 1. Our expressions for A(r) and B(r)A(r) \text{ and } B(r) satisfy these properties and hence agree with the Minkowski spacetime arguments at infinite distances from the black hole.

Substituting these functions of rr into our line metric equation yields the completed Schwarzschild line metric for the empty spacetime outside the spherically symmetric body as

ds2=(12Mr)dt2112Mrdr2r2(dθ2+sin2(θ)dϕ2),ds^2 = \left(1-\frac{2M}{ r}\right)dt^2-\frac{1}{1-\frac{2M}{ r}}dr^2- r^2(d\theta^2+\sin^2 (\theta) d\phi^2),\ \label{2.5} with the metric tensor being gα,β=((12Mr)0000(12Mr)10000r20000r2sin2θ).g_{\alpha,\beta} = \begin{pmatrix} (1-\frac{2M}{ r}) & 0 & 0 & 0 \\ 0 & -(1-\frac{2M}{ r})^{-1} & 0 & 0 \\ 0 & 0 & -r^2& 0 \\ 0 & 0 & 0 & -r^2\sin^2\theta\\ \end{pmatrix}.

Now that the line metric has been calculated, a system of first order differential equations can be derived that serve as the equations of motion for photons along null geodesics in the Schwarzschild geometry.

3.2 The Equations of Motion

To derive the equations of motion, the line metric needs to be simplified. To do this one of the spatial dimensions of the geometry is removed, forcing the photon paths to be ray traced in a two dimensional equatorial plane through the black hole with the three coordinates, (t,r,ϕ)(t, r, \phi). Hence the θ\theta component is considered as being removed from our Schwarzschild line metric equation , so that our model now traces light in the equatorial plane only. The spherical symmetry in this geometry allows us to remove θ\theta without loss of generality. Work in this section has been based on Shultz’s book [1], Chapter 11.1.

By removing the θ\theta component from the Schwarzschild line metric equation and equating ds2=0ds^2=0, because photons do not feel real time and hence they do not travel any real distance, gives

$$0 = -A(r) \dot{t}^2 + \frac{1}{A(r)} \dot{r}^2 + r^2 \dot{\phi}^2, \\$$ where A(r)A(r) is our function defined as A(r)=(12M/r)A(r) = (1-2M/ r). The origin of this system is at the centre of the black hole and the photons have polar coordinates, {r,ϕ}\{r, \phi\}.

The energy of photons in this geometry, along each trajectory, are constant and can be set equal to E=ρ0E=-\rho_0, since time is independent in this metric. Spherical symmetry in this metric causes the angular momentum of photons along trajectories also to be constant and set equal to L=pϕL= p_\phi. Because of these two conserved quantities it makes the momentum components of the photon become p0=(12Mr)1E,pr=drdλ=ṙ,pϕ=dϕdλ=ϕ̇=Lr2.\begin{aligned} p^0 &= \left(1-\frac{2M}{r}\right) ^{-1} E ,\\ p^r &= \frac{dr}{d\lambda} = \dot{r}, \\ p^{\phi} &= \frac{d\phi}{d\lambda} = \dot\phi= \frac{L}{r^2}. \\ \end{aligned} \label{2.6} The affine parameter, λ\lambda, in the above equation is defined by the photon’s prp^r. Substituting these momentums into the line metric of the photon and setting ds2=0ds^2 =0 produces 0=E2(12Mr)1+(12Mr)1(drdλ)2+L2r2.\begin{aligned} 0 &= -E^2 \left(1-\frac{2M}{r}\right) ^{-1} + \left(1-\frac{2M}{r}\right) ^{-1}\left(\frac{dr}{d\lambda}\right)^2 + \frac{L^2}{r^2} .\\ \end{aligned} \label{2.7} Rearranging the equation results in (drdλ)2=E2(12Mr)L2r2=E2Veff\begin{aligned} \left(\frac{dr}{d\lambda}\right)^2 &= E^2 - \left(1-\frac{2M}{r}\right) \frac{L^2}{r^2} = E^2 -V_{eff} \\ \end{aligned} \label{2.8} where VeffV_{eff} is defined as the effective potential of the photon. This potential will be discussed in more detail in the next chapter. Differentiating this equation with respect to λ\lambda yields

2(drdλ)(d2rdλ2)=ddrVeff(r)(drdλ).\begin{aligned} 2\left(\frac{dr}{d\lambda}\right) \left(\frac{d^2r}{d\lambda^2}\right) &= - \frac{d}{dr}V_{eff}(r)\left(\frac{dr}{d\lambda}\right) . \\ \end{aligned} \label{2.8b}

with

(d2rdλ2)=12ddrVeff(r).\begin{aligned} \left(\frac{d^2r}{d\lambda^2}\right) &= - \frac{1}{2}\frac{d}{dr}V_{eff}(r). \\ \end{aligned} \label{2.8c}

This can then be expressed as

r̈=L22(2r3+6Mr4),r̈=L2(3Mr)r4.\begin{aligned} \ddot{r} &= -\frac{L^2}{2} \left(-\frac{2}{r^3} + \frac{6M}{r^4}\right), \\ \ddot{r} &= -\frac{L^2(3M-r)}{r^4}.\\ \end{aligned} \label{2.9}

To make this second order equation into a system of first order equations, a variable ss is defined as sṙs\equiv \dot{r}. Substituting this into the above equation then gives the following system of first order equations:

ϕ̇=L/r2,ṙ=s,ṡ=L2(3Mr)r4.\begin{aligned} \dot{\phi} &= L/r^2\,,\\[1ex] \dot{r} &= s\,,\\[1ex] \dot{s} &= -\frac{L^2(3M-r)}{r^4}\,. \label{2.10} \end{aligned} The equations above are those that govern the motion of a photon in the equatorial plane of the Schwarzschild geometry. They can be analytically solved without much difficulty, but the equations of motion become a lot more complicated for less symmetric cases of black holes, such as rotating ones, which won’t be covered as they are beyond the scope of this report. For rotating black holes, the geometries are no longer symmetric, hence they cannot be generalised to two dimensions.

Now that these equations of motion have been derived we can use them to ray trace the photon’s paths around Schwarzschild black holes.

3.3 Ray Tracing in the Schwarzschild Geometry

To produce images of Schwarzschild black holes our code will need to ray trace the photons paths. The images will be what appears from a camera that is looking directly at a black hole with a celestial sphere star field at an infinite distance behind it. This is shown in Figure 3.1 where a pinhole camera is on the left, the black hole is the black disc in the centre and a star field on a celestial sphere is on the right. In this figure we see a photon path, the green line, starting from a point on the celestial sphere being diverted around the black hole and still ending in the pinhole camera. So from the pinhole camera’s perspective the image of the point on the celestial sphere looks like it is coming from a different direction than it actually is.

Figure 3.1: The set up arrangement of how the code produced will mimic what a pinhole camera captures, pointing directly at a Schwarzschild black hole with a celestial sphere behind it.

Pinhole cameras work by having an infinitesimally small hole in a light-proof box as shown in Figure 3.2. When light from various angles pass through this aperture it forms an image that has been inverted both vertically and horizontally on a photographic plate on the opposite side of the box. The width of the lightproof box is known as it focal length, ff, which is a constant we set before running the code. The focal length affects how much light passes into the box, to determine the size and view of the image. The code produces the images by modelling what appears on the photographic plate of a pinhole camera in Figure 3.2.

Figure 3.2: Pinhole camera setup, showing how light from objects travels through a tiny aperture in a light proof box to produce the distorted image of the object.

To ray trace these paths an integrating function in python solves the three first order differential equations for the Schwarzschild Geometry, by starting the photons at the aperture of the pinhole camera and iterates over each time step, by integrating the equations to produce an array, (ϕ,r,s\phi,r,s), of the photon’s location at each time step. This function uses the initial values of (ϕ,r,s\phi,r,s) are used to find solutions of the derivatives for each time step.It then integrates over the functions to produce the array of the photon’s locations as z=[[ϕ0,r0,s0],,[ϕt,rt,st]]z= [[\phi_0,r_0,s_0],…,[\phi_t,r_t,s_t]] for each time step from 00 to tt. Setting the amount of time steps to a very large integer, gives an accurate location of the photon’s location when tt \to \infty. Plotting the array of locations of the photon shows the paths that the light travels along in two dimensions around and near the black hole. Using a range of values of angular momentum, LL, for the photons we see the different paths that light travels along.

t  = np.linspace(0,1000,200) # time steps
yo = [2, 3]                  # constants [M, L]
zo = [np.pi, 20, -0.13]      # initial [phi0, r0, s0]

def function(z, t, y):      # ODE functions
    phi, r, s = z
    M, L = y

    dpdt = L/r**2
    drdt = s
    dsdt = -(L**2)*(3.0*M-r)/(r**4)
    return [dpdt, drdt, dsdt]

z = scipy.integrate.odeint(function,zo,t, args=(yo,))  # solve ODE
phi, r, s = z[:,0], z[:,1], z[:,2]

Ray tracing these light paths for each pixel on the photographic plate will take the code large periods of time to run and produce good quality images, so it would be an ineffective method. To speed up the code, we find a relation between the curvature of the light paths, which generalises for all paths near the black hole. Because this is a symmetric problem we can find a correlation between two different angles in the two dimensional plane. Figure 3.3 shows the first angle being α\alpha', which is the angle under which a star’s light would classically enter the camera’s aperture in the absence of the black hole, which is the star’s natural angle as it would be in Newtonian physics. The second angle, α\alpha, in Figure 3.3 is the angle at which the light from the same star actually enters the camera’s aperture due to the bending caused by the black hole’s gravitational field. Both of these angles will be measured with respect to the horizontal in the black hole’s equatorial plane.

Figure 3.3: Shows the angles, α\alpha and α\alpha', the light rays posses when travel from a point on the celestial sphere to the pinhole camera. Angle α\alpha is the angle of incidence that light hits the camera’s aperture, and angle α\alpha' is the real angle that the star on the celestial sphere makes with the aperture. Both of these angles are measured with respect to the horizontal.

These angles are calculated simply by comparing the different locations of photons and using their change in positions. To get the real angle of the star, α\alpha', the end location of the photon is recorded after many time iterations to get the angle ϕ\phi which is what α\alpha' tends to when you hit the celestial sphere because it is at an infinite distance away. The angle α\alpha is calculated using trigonometric equations using the change in location of the photon between the first two time steps. After getting a list of various angles of α\alpha and α\alpha' by using many different values of angular momentum, LL, an interpolating function in python produces a map from αα\alpha \to \alpha' by comparing the relations in values of the two angles. This map acts as a function that after an angle α\alpha is entered into it, it finds the corresponding value of α\alpha'.

This map between α\alpha and α\alpha' has been plotted, shown in Figure 3.4, where as you would expect for small angles of α\alpha the plot has no corresponding α\alpha' values as the photons have been absorbed by the black hole and cannot escape. For this reason there do not exist any α\alpha values lower than this one, as there are limitations to the amount of gravitational lensing that can occur. This is when light travels around the black hole in different directions and intersect in the future, which will be explained in more detail in the next chapter. The photon that has the maximum curvature around the black hole is plotted with the smallest value of α\alpha, hence no plots exists below this. Increasing α\alpha from this point the plot is steep with a large gradient and corresponds to negative α\alpha' values, which has been caused by photons traveling from the lower side of the celestial sphere, curving up and around the top of black hole and still making it to the pinhole camera. As α\alpha gets larger, and closer to π/2\pi/2, the graph becomes less steep and the values of α\alpha and α\alpha' tend to α=α\alpha=\alpha', represented by the straight blue dashed line. This occurs because when the photons are traveling further away from the black hole, they are less curved by it, causing the map of the angles to have a direct correlation. For negative α\alpha values the plot would appear as the plot in Figure 3.4 reflected in the α=α\alpha = \alpha' line.

Figure 3.4: Plot of the correlation between α\alpha and α\alpha'. The blue dashed line represents the line of α=α\alpha=\alpha', which our plot tends to for greater values of α\alpha.

Another angle, β\beta, is introduced to generalise, by rotational symmetry, our model to a three dimensional problem as θ\theta was removed from the line metric equation to simplify the ray tracing in the two dimensional equatorial plane. The angle β\beta will be defined as the angle between the photon and the direct vertical, which we were using as the equatorial plane. In this model light paths will only be traced in two dimensions, so that the angle β\beta will not be affected by the curvature of spacetime. The only change to β\beta will be from the pinhole camera. So after the photon has left the pinhole camera, the angle is just inverted horizontally and vertically as we pass the black hole because the Schwarzschild geometry is symmetric and because of the properties of pinhole cameras. So this relation is defined as β=β\beta' =- \beta.

Now that all of the crucial steps of ray tracing have been covered, a backwards ray tracing algorithm can now be derived to produce the black hole images.

3.4 The Backwards Ray Tracing Algorithm

To produce these images of Schwarzschild black holes, a code with an algorithm that will be outlined below is used. The following steps need to be taken for the code to produce an image of a black hole:

Now that the photon’s equations of motions in the Schwarzschild geometry have been derived and used in our piece of code that contains the algorithm to ray trace and produce images of these black holes, we can move onto analysing the images of the black holes.