Now think about a equatorial slice through Schwarzschild. There's curvature: the usual coordinates use a circumferential radius coordinate, so r is the distance around a circle at that point divided by 2π. On the flat paper, if we draw a bunch of concentric circles around a point, each one has a distance r to the centre and a circumference 2πr. And then the distance between a circle at r1 and a circle at r2 is r1-r2. But in Schwarzschild it's different: the distance between two circles is
which is longer than r1-r2, by a little bit far away from the center, increasing toward the horizon.
So let's make a slice of schwarzschild out of paper!
Version 1: This is not perfect, but I thought that the programming environment Processing would be good for this and some other little ideas I have.
I figured that I would divide the spacetime slice around the centre like a pie and figure out the shape of each chunk, then tape them together. So the first step was to figure out how I might draw a slice in flat spacetime:
void setup() { size(400,400); background(255); smooth(); int segments = 16; int radii = 10; int centrex = 200; int centrey = 350; float spacing =30; stroke(128); for(int i= radii; i>0; i--){ arc(centrex,centrey,2 * spacing *i,2* spacing*i,-PI/2 - PI/segments,-PI/2+ PI/segments); line(centrex-spacing*(i-1)*sin(PI/segments), centrey-spacing*(i-1)*cos(PI/segments), centrex-spacing*i*sin(PI/segments), centrey-spacing*i*cos(PI/segments)); line(centrex+spacing*(i-1)*sin(PI/segments), centrey-spacing*(i-1)*cos(PI/segments), centrex+spacing*i*sin(PI/segments), centrey-spacing*i*cos(PI/segments)); } }And then, keep the arcs to make the same circumference of circle, but add extra linear spacing so that they follow the Schwarzschild relationship (note: math needs to be double checked)
void setup() { size(400,800); background(255); smooth(); int segments = 8; int radii = 20; int centrex = 200; int centrey = 700; float basespacing =20; float horizon = 80; stroke(128); float oldx = centrex-(horizon+ radii * basespacing) * sin(PI/segments); float oldy = centrey-(horizon+ radii * basespacing)*(cos(PI/segments)); for(float radius = horizon + radii*basespacing; radius >= horizon; radius = radius - basespacing){ // The spacing is modified to shift circumference // circles up so they are the appropriate distance from the horizon float horizondist = sqrt( radius * (radius - horizon) )- 0.5*horizon*log(horizon/radius) + horizon * log(1 + sqrt(1-horizon/radius)); println(radius + " "+(radius-horizon) + " "+(horizondist)); arc(centrex,centrey-horizondist+radius,2 *radius,2*radius,-PI/2 - PI/segments,-PI/2+ PI/segments); float newx = centrex - radius * sin(PI/segments); float newy = centrey-horizondist+radius - radius * cos(PI/segments); line(oldx,oldy,newx,newy); line(-oldx+2 *centrex,oldy,-newx+2*centrex,newy); oldx = newx; oldy = newy; } }But this isn't quite right, because the lowest arc, which is the horizon, at which point the proper distance between two radial coordinates blows up - doesn't need to be an arc. The paper will be curved down into a funnel shape here, and a flat bottom of the paper will curve around with all the pieces stuck together. So some of the arc-ness is coming from the change in angle of the sides in the curved space time, and I need to take that into account.
This comment has been removed by a blog administrator.
ReplyDelete