Liebe Sternfreunde, im Heft 89 zeige ich ein einfaches beispiel der Wellenoptik – die Beugung am Spalt. Deutlich mehr Praxisrelevanz gibt es in den nächsten beiden Heften.
Hier das Programm:
Code:
# Programm Spalt.yp - Beugung am Spalt
from math import *
from turtle import *
from random import *
def Plot(x,y, thickness, col): # einen Punkt setzen
color(col)
penup()
goto(x,y)
pendown()
dot(thickness)
hideturtle()
def plot(x,y):
Plot(x,y,3, 'black')
def Line(x0,y0,x1,y1, thickness, col):
color(col)
width(thickness)
penup(); goto(x0,y0)
dx=x1-x0; dy=y1-y0
pendown()
if (dx<1e-10):
setheading(90)
forward(dy)
else:
setheading(180*atan(dy/dx)/pi)
forward(sqrt(dx*dx+dy*dy))
hideturtle()
def line(x0,y0,x1,y1):
Line(x0,y0,x1,y1, 1, 'black')
def greenline(x0,y0,x1,y1):
Line(x0,y0,x1,y1, 1, 'lightgreen')
# Koordinatensystem
def initKoor(x0,x1,stepX, y0,y1,stepY):
tracer(0,0)
setworldcoordinates(x0-0.01*(x1-x0),y0-0.01*(y1-y0),x1+0.01*(x1-x0),y1+0.01*(y1-y0))
line(x0,y0,x0,y1)
line(x0,y0,x1,y0)
x=x0;y=y0
while (y<=y1):
line(x,y,x+0.01*(x1-x0),y)
write(y,font=('Arial',10))
if y>y0+1e-10:
greenline(x+0.01*(x1-x0),y,x1,y)
y=y+stepY
x=x0;y=y0
while (x<=x1):
line(x,y,x,y+0.01*(y1-y0))
#line(x,y+0.01*(y1-y0),x,y1)
write(x,font=('Arial',10))
if x>x0+1e-10:
greenline(x,y+0.01*(y1-y0),x,y1)
x=x+stepX
update()
def sq(x): # Quadratfunktion
return x*x
# Main - Beugung am Spalt
scr=600
I = [0 for i in range(scr)] # Bild
D=0.1 # Abstand zum Schirm
w=0.1 # Breite des Schirms
b=2.5e-6 # Breite des Spaltes
S=1000 # Anzahl Elementarwellen
l=0.555e-6 # lambda 555nm
for i in range (scr): # jeder Punkt des Schirms...
X=i*w/2/scr # X läuft über den halben Schirn
Q=sqrt(sq(D)+sq(X)) # Länge vom Schlitz-Zentrum
for j in range (S+1):
x=-b/2+j/S*b # x läuft über den ganzen Schlitz
q=sqrt(sq(D)+sq(X-x)) # Länge des betrachteten Wellenzuges
s=Q-q
a=cos(2*pi*s/l)/q
I[i]=I[i]+a
M=0 # maximale Intensität suchen
for i in range (scr):
a=sq(I[i])
if a>M:
M=a
tracer(0,0)
initKoor(0,1000*w,1000*w/10, 0,1,0.25) # Millimeter in x
for i in range (scr):
a=sq(I[i])
x=1000*w*i/scr # in mm
plot(x,a/M) # aud Maximum skaliert
hideturtle();update();done()