GraphicsWindow.Title = "Snell's Law"
Init()
θA = 40
nA = 1 ' refractive index of air
nB = 2 ' refractive index of glass
_θA = Math.GetRadians(θA)
_θB = Math.ArcSin(nA / nB * Math.Sin(_θA))
θB = Math.GetDegrees(_θB)
xo = gw / 2
yo = gh / 2
x = xo - Math.Tan(_θA) * (yo - 10)
y = 10
GraphicsWindow.DrawLine(x, y, xo, yo)
x = xo + Math.Tan(_θB) * (yo - 10)
y = gh - 10
GraphicsWindow.DrawLine(x, y, xo, yo)
param = "r=50;x=" + xo + ";y=" + yo + ";a1=-90;a2=" + (-90-θA) + ";"
DrawArc()
a = -90 - θA / 2
_a = Math.GetRadians(a)
r = 70
GraphicsWindow.FontSize = 12
x = xo + r * Math.Cos(_a) - 4
y = yo + r * Math.Sin(_a) - 4
GraphicsWindow.DrawText(x, y, "θ")
GraphicsWindow.FontSize = 9
GraphicsWindow.DrawText(x + 8, y + 6, "A")
param = "r=50;x=" + xo + ";y=" + yo + ";a1=90;a2=" + (90-θB) + ";"
DrawArc()
a = 90 - θB / 2
_a = Math.GetRadians(a)
r = 70
GraphicsWindow.FontSize = 12
x = xo + r * Math.Cos(_a) - 4
y = yo + r * Math.Sin(_a) - 4
GraphicsWindow.DrawText(x, y, "θ")
GraphicsWindow.FontSize = 9
GraphicsWindow.DrawText(x + 8, y + 6, "B")
Sub DrawArc
xo = param["x"]
yo = param["y"]
r = param["r"]
a1 = param["a1"]
a2 = param["a2"]
aMin = Math.Min(a1, a2)
aMax = Math.Max(a1, a2)
last = "False"
For a = aMin To aMax Step 5
_a = Math.GetRadians(a)
x = xo + r * Math.Cos(_a)
y = yo + r * Math.Sin(_a)
If aMin < a Then
GraphicsWindow.DrawLine(x, y, xLast, yLast)
EndIf
If Not[last] And (aMax < a + 5) Then
a = aMax - 5
last = "True"
EndIf
xLast = x
yLast = y
EndFor
EndSub
Sub DrawDottedLine
x1 = param["x1"]
y1 = param["y1"]
x2 = param["x2"]
y2 = param["y2"]
l = Math.SquareRoot(Math.Power(x2 - x1, 2) + Math.Power(y2 - y1, 2))
dl = 3
r = 1
dr = dl / l * r
i = 0
For r = 0 To 1 Step dr
x = x1 + (x2 - x1) * r
y = y1 + (y2 - y1) * r
If Math.Remainder(i, 2) = 1 Then
GraphicsWindow.DrawLine(x, y, xLast, yLast)
EndIf
xLast = x
yLast = y
i = i + 1
EndFor
EndSub