Schützenfisch Aufgabe

Gegeben:

  • \(n_{H_2O}\) = 1,333 (bei \(\vartheta\) = 20°C und \(\lambda\) = 589nm)

  • \(n_{Luft}\) = 1

Mit dem Brechunggesetz

\( n_{Luft} \cdot \sin(\alpha) = n_{H_2O} \cdot \sin(\beta) \)

und \(\alpha=\delta+\beta\) ergibt sich

\( n_{Luft} \cdot \sin(\delta+\beta) = n_{H_2O} \cdot \sin(\beta) \).

Diese Formel lässt sich über die Näherung für kleine Winkel \(\sin(\alpha)=\alpha\) zu

\(\delta\approx\frac{\beta}{3}\)

umstellen.

Skizze

#Import der benötigten Bibliotheken
import math 
import matplotlib.pyplot as plt
import numpy as np
def calulate_alpha(beta):
    sina, alpha = 0,0
    sina = math.sin(math.radians(beta)) * 1.333 #n_H20=1.333
    if sina < 1:
        alpha = math.degrees(math.asin(sina)) 
    else:
        sina = 1
        alpha = math.degrees(math.asin(sina)) 
    return alpha
def plot_fisch_aufgabe(beta):
    #Abfangen zu großer Winkel
    if beta > 90 or beta < -90:
        print(r'Ich glaube der Fisch liegt auf dem Trockenen. Damit der Fisch nicht aus dem Wasser hüpft halte beta unter 90 ° bzw. über -90°')

    #Abfangen von Winkeln, die größer als der Totalreflexionswinkel für den Übergang Wasser->Luft sind (ca. 48 °)
    elif (beta > 48 and beta < 90) or (beta<-48 and beta>-90):
        print(r'Der eingegebene Winkel liegt über dem Grenzwinkel für Totalreflexion für den Übergang von Wasser zu Luft von ca. 48 °'
              ' d.h. der Fisch sieht unter diesem Winkel die Grenzfläche Wasser-Luft als wäre sie ein Spiegel')

    else:
        alpha = calulate_alpha(beta) #Funktion aufrufen, die den Ablenkwinkel alpha berechnet
        x, y, length = 0, 0, 8
        beta1 = beta + 270 
        endbetay =  length * math.sin(math.radians(beta1))
        endbetax = length * math.cos(math.radians(beta1))
        
        beta2 = beta1 - 180 
        endbeta2y =  length * math.sin(math.radians(beta2))
        endbeta2x = length * math.cos(math.radians(beta2))
        
     
        alpha1 = alpha + 90
        endalphay = y + length * math.sin(math.radians(alpha1))
        endalphax = length * math.cos(math.radians(alpha1))

        # plot the points      
        fig = plt.figure(num=None, figsize=(10, 5), dpi=150, facecolor='w', edgecolor='k')
        ax = plt.subplot(111)
        ax.set_ylim([-10, 10])   # set the bounds to be 10, 10
        ax.set_xlim([-10, 10])
        ax.plot([x, endbetax], [y, endbetay])
        ax.text(endbetax, endbetay, 'Fisch')
        ax.plot([x, endalphax], [y, endalphay])
        ax.text(endalphax, endalphay, 'Fliege')
        ax.plot([x, endbeta2x], [y, endbeta2y])
        ax.text(endbeta2x, endbeta2y, 'Bild')     
        ax.axhline(y=0, xmin= -6, xmax= 15, color='black', linewidth=1)
        ax.axvline(x=0, ymin= -6, ymax= 6, color='black', linewidth=1)
        ax.text(9,1, r'Luft ($n_{Luft}$=1)')   
        ax.text(9,-1.5, r'Wasser $(n_{H_2O}$=1.333)')
        ax.text(11,9,r'$\alpha = $' + str(round(alpha,2)) + '$^\circ$')
        ax.text(11,7,r'$\beta = $' + str(round(beta,2))+ '$^\circ$')
        ax.text(11,5,r'$\delta = $' + str(round(alpha - beta,2))+ '$^\circ$')
        plt.axis('off')
plot_fisch_aufgabe(beta = 45) #Blickwinkel des Fisches definieren
#Die getroffene Näherung für kleine Winkel gilt bis ca. 15°, darüber wird die Abweichung zu groß!
#vgl. beta und delta oben rechts in der Darstellung 
../../../_images/Schuetzenfisch_5_0.png