A&A Title Image Startseite | Programme: Raumkrümmung | Algorithmen, Lektionen, Analysen | Unsere Vorläufer | Kontakt, Datenschutz

VdS-Journal 76-78: Raumkrümmung, Lichtwege im Umfeld Schwarzer Löcher

Schnell-Anwahl:
VdS-Journal 76 – Raumkrümmung selbst berechnen
VdS-Journal 77 – Ein Photon fliegt an einem Schwarzen Loch vorbei
VdS-Journal 78 – Schatten eines Schwarzen Lochs

VdS-Journal 76: Raumkrümmung selbst berechnen

Das Programm simuliert die Bewegung direkt auf das Zentrum des Schwarzen Lochs zu – das ist der einfachste Fall.


from turtle import *
from random import *
from math import *

def text(x,y,text):
    penup()
    goto(60*x-300,60*y-300)
    write(text,font=("Arial", 14))
    
def line(x1,y1,x2,y2):
    penup()
    goto(60*x1-300,60*y1-300)
    pendown()
    goto(60*x2-300,60*y2-300)
    
def plot(x,y): # einen Punkt setzen
    penup()
    goto(60*x-300,60*y-300)
    pendown()
    dot(4)
    hideturtle()

# Hauptprogramm
tracer(0,0) # Bildschirm aus
r=10
s=0
ds=0.01
y=0
# Koordinatensystem
line(0,0,12,0)
line(0,0,0,11)
line(10,0,10,-0.2)
text(0.9,-0.6,"1")
text(9.8,-0.6,"10")
text(10.8,-0.6,"r in rs")
text(-0.1,-0.6,"0")
# Schwarzschildradius
pencolor("red")
line(1,0.2,1, 10.5)

pencolor("blue")
# eigentliche Rechnung
while r>1.001:
    s=s+ds
    dr=ds*(sqrt(1-1/r))
    r=r-dr
    dy=sqrt(ds*ds-dr*dr)
    y=y+dy
    plot(r, y)
    # print(r, s)
print ("s=",s)    
update() # Bildschirm an

VdS-Journal 77: Ein Photon fliegt an einem Schwarzen Loch vorbei

Wenn ein Photon tangential an einem Gravitationszentrum vorbeifliegt, dann wird der Lichtweg abgelenkt. Das Programm löst die zugrundeliegende Differentialgleichung numerisch.


from turtle import *
from random import *
from math import *

def plot(x,y): # einen Punkt setzen
    penup()
    goto(50*x,50*y)
    pendown()
    dot(3)
    hideturtle()

def Circle():
    w=0
    for i in range (1000):
        x=cos(w)
        y=sin(w)
        plot(x,y)
        w=w+2*pi/1000
        
        
# Hauptprogramm
r0=float(input("r0: "))
tracer(0,0) # Turtle aus
Circle()
r=1.00000001*r0
phi=0
Delta=1e-3
while r<10:
    for i in range (10):
        drdphi=r*r*r*r/(r0*r0*r0)
        drdphi=drdphi*(r0-1)-r*(r-1)
        if (drdphi<0):
            print("Fehler: r0 ist ungueltig")
        drdphi=sqrt(drdphi)
        r=r+Delta*drdphi
        phi=phi+Delta
        x=r*cos(phi)
        y=r*sin(phi)            
        plot(x,y)
        # auch nach unten zeichnen
        x=r*cos(-phi)
        y=r*sin(-phi)            
        plot(x,y)
    update()
done()


VdS-Journal 78: Schatten eines Schwarzen Lochs

Die Formel von Journal 77 wird auf mehrere Strahle angewendet. Diese werden parallel ausgerichtet, so wie sie einen entfernten Beobachter erreichen. Mann erkennt, dass aus der Umgebung eines Schwarzen Lochs kein Licht kommen kann und dieses eine Art Schatten bildet.


from turtle import *
from random import *
from math import *

def plot(x,y): # einen Punkt setzen
    penup()
    goto(50*x,50*y)
    pendown()
    dot(3)
    hideturtle()

def circle():
    w=0
    for i in range (1000):
        x=cos(w)
        y=sin(w)
        plot(x,y)
        w=w+2*pi/1000
             
def einStrahl(r0, deltaPhi, plotflag):
    r=1.00000001*r0
    phi=0
    Delta=1e-3
    while r<70:
        # nur jeden 10. Punkt zeichnen
        for i in range (10):
            # Steigung berechnen
            drdphi=r*r*r*r/(r0*r0*r0)
            drdphi=drdphi*(r0-1)-r*(r-1)
            drdphi=sqrt(drdphi)
            # Werte der vorigen Runde aufheben
            R=r;Phi=phi
            # neuen Punkt bestimmen
            r=r+Delta*drdphi
            phi=phi+Delta
            # zuerst nach unten zeichnen
            x=r*cos(-phi-deltaPhi)
            y=r*sin(-phi-deltaPhi)            
            if (1==plotflag): plot(x,y)
            x=r*cos(phi-deltaPhi)
            y=r*sin(phi-deltaPhi)            
            if (1==plotflag): plot(x,y)
    # Punktrichtungsgleichung auswerten
    X=x-R*cos(Phi)
    Y=y-R*sin(Phi)
    deltaPhi=atan2(Y,X)
    return deltaPhi

# Hauptprogramm
tracer(0,0) # Turtle aus
circle()
r0=1.55
while r0<15:
    deltaPhi=0
    deltaPhi=einStrahl(r0, deltaPhi, 0)
    pencolor("blue")
    einStrahl(r0, deltaPhi, 1)
    # symmetrischen Strahl in anderer Farbe
    pencolor("red")
    einStrahl(r0, 2*pi-deltaPhi, 1)
    r0=r0*1.2
    print(r0, deltaPhi)
    update()
done()