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
Das Programm simuliert die Bewegung direkt auf das Zentrum des Schwarzen Lochs zu – das ist der einfachste Fall.
#Programm Raumkr2.py
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
Wenn ein Photon tangential an einem Gravitationszentrum vorbeifliegt, dann wird der Lichtweg abgelenkt. Das Programm löst die zugrundeliegende Differentialgleichung numerisch.
Programm Raumkr3.py
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()
Die Formel von Journal 77 wird auf mehrere Strahlen angewendet. Diese werden parallel ausgerichtet, so wie sie einen entfernten Beobachter erreichen. Man erkennt, dass aus der Umgebung eines Schwarzen Lochs kein Licht kommen kann und dieses eine Art Schatten bildet.
#Programm SchattenSL.py
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()