Forum der Vereinigung der Sternfreunde

Forum of the German Amateur Astronomy Association
Aktuelle Zeit: 11. Januar 2026, 22:41:29 PM

Alle Zeiten sind UTC+02:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
BeitragVerfasst: 30. April 2024, 14:21:34 PM 
Offline
Meister
Benutzeravatar

Registriert: 20. Januar 2013, 20:03:54 PM
Beiträge: 1978
Wohnort: Leipzig
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()


Dateianhänge:
optSpalt.jpg
optSpalt.jpg [ 54.62 KiB | 9306 mal betrachtet ]

_________________
Uwe Pilz, Fachgruppen Kometen und Astrophysik/Algorithmen.
Oft benutzte Instrumente: Fujinon 16x70 FMT-SX-2, TMB Apo 105/650, Skywatcher Evostar 120/900 ED, Ninja Dobson 320/1440, Smartscope Dwarf-3
Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC+02:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de