Snell's law besagt, dass das Verhältnis der Sinusse des Einfallswinkels und Brechung zu dem Kehrwert des Verhältnisses der Brechungsindices der angegebenen Materialien entsprechen:Snells Gesetz - wie mit ungültigen Werten in asin() umgehen?
I ein einfaches Programm implementieren wollte um das Gesetz zu visualisieren. Da , und bekannt sind, ist hier, wie ich berechnen :
theta2 = asin((sin(theta1) * n1)/n2);
Das Problem ist, dass für bestimmte Werte von und (zum Beispiel 1,52 und 1,0 für Glas und Luft beziehungsweise), das Ergebnis der (sin(theta1) * n1)/n2
kann für größere Winkel mehr als 1,0 betragen, wodurch asin
NaN zurückgegeben wird. Die Art, wie ich damit klarkomme, ist zu überprüfen, ob (sin(theta1) * n1)/n2
größer als 1,0 ist, und wenn das der Fall ist, ziehen Sie zuerst 1 davon ab, berechnen Sie mit dem neuen Wert und fügen Sie dann 0.5 * M_PI
(oder 90,0 Grad) hinzu. Gibt es einen besseren Weg?
Warum fügen Sie den Hack für NaN-Werte von 'Theta2' hinzu? Entspricht das nicht der totalen inneren Reflexion? Dies ist der Fall, wenn kein gebrochener Strahl vorhanden ist. https://en.wikipedia.org/wiki/Snell's_law#Total_internal_reflection_and_critical_angle –