
Show HN: Rendering black holes with Haskell - flannelhead
https://flannelhead.github.io/projects/blackstar.html
======
flannelhead
Hello HN!

I thought I would share this little writeup on a project I'm quite proud of.
The code can be found on GitHub [0]. This article is mostly about the
implementation of the simulation in Haskell. I've also written another article
[1] on the physics of the simulation. It should be approachable even for those
without any general relativity background.

[0]
[https://github.com/flannelhead/blackstar](https://github.com/flannelhead/blackstar)

[1] [https://flannelhead.github.io/posts/2016-03-06-photons-
and-b...](https://flannelhead.github.io/posts/2016-03-06-photons-and-black-
holes.html)

~~~
spacehome
Very cool work! You should be proud of it.

One idea that you might think about adding is redshifting the light that comes
off the accretion disk. If the light is monochromatic coming off the disk,
then the areas of the disk closer to the horizon should look more red to a
distant observer.

~~~
flannelhead
Thanks for the compliment and suggestion! The redshift would be interesting to
do, I'll consider that.

------
jsprogrammer
At the end you say:

>Let me remind you that these are not the real equations of motion for the
photon. The real equations of motion would have been achieved by calculating
all of the geodesic equations from the Lagrangian. There are four of them
instead of the three equations (in vector form) above. However, the three
spatial equations will generate the exact same spatial curve as the real
geodesic equations would, and they were relatively easily achieved.

What do you mean that these are not the real equations of motion for the
photon, but that they give the exact same spatial curve as the real geodesic
equations? Are there cases where these equations would not give the exact same
curve as the real geodesic equations?

~~~
flannelhead
That statement is indeed a bit vague. Let me elaborate:

In the process of deriving the said equations, an equation for the radial
coordinate of the photon was achieved. This was identified with a classical,
Newtonian system of one particle with unity mass. As the real, massless photon
lives in four-dimensional spacetime and the said massive "test particle" lives
in three-dimensional space, these systems just can't be dynamically the same
(in spacetime, the massive particle would take a timelike curve).

To reword the statement, the derived "equation of motion" will yield the same
trajectory in the spacelike components (x, y, z), but possibly with a
different parametrization - in the classical system, we're integrating the
equations of motion with respect to the time. However, this has nothing to do
with the "coordinate time" of the four-vectors nor the proper time of the
particle (for the photon, proper time doesn't even make sense).

Hope this helps! You could also see [0] for an alternative take on this
derivation. I will try and clarify my article a bit as well.

[0]
[http://rantonels.github.io/starless/](http://rantonels.github.io/starless/)

------
pizza
GIFs? ;)

~~~
flannelhead
Maybe in the future, and in small resolution. Right now the renderer doesn't
have any animation functionality, but this is definitely something I've been
considering.

