Total Internal Reflection Simulation

Total Internal Reflection Simulation
Loading the math board and drawing, please wait…
2020-03-10 00:40
This example demonstrates the phenomenon of total internal reflection at an interface between two media. It involves key mathematical concepts like Snell's Law, critical angle, trigonometry, and vector operations. Constructed using GeoGebra commands such as If, Sequence, Join, Point, CircleArc, Segment, Vector, Length, Polygon, Textfield, and Angle for dynamic visualization of light paths and angle measurements. Suitable for high school physics optics teaching and university-level fundamental physics experiments.

GeoGebra Commands & Parameters

  1. If(n1 > n2, asin(n2 / n1), 0) → thetac
  2. If(n1 ≤ n2, (radius, 0), ((radius * cos(π / 2 - thetac)), (radius * sin(π / 2 - thetac)))) → CircleRight
  3. If(n1 ≤ n2, ((-radius), 0), ((radius * cos(π / 2 + thetac)), (radius * sin(π / 2 + thetac)))) → CircleLeft
  4. Sequence(((radius * cos((i * π / N))), (radius * sin((i * π / N)))), i, 0, N) → CirclePoints
  5. Join({CirclePoints, CriticalAngles}) → AllPoints
  6. Point(yAxis) → Interface
  7. Point(AllPoints) → IncidentTail
  8. CircleArc(Interface, CircleRight, CircleLeft) → Circle
  9. Segment(Interface, IncidentTail) → IncidentSegment
  10. Vector(IncidentTail, Interface) → Incident
  11. Length(Incident) → Mag
  12. Segment((0, 0), (0, AxisHeight)) → YAxisUp
  13. If(x(IncidentTail) ≤ 0, Angle[YAxisUp, IncidentSegment], Angle[IncidentSegment, YAxisUp]) → AA
  14. Segment(Interface, RefractedHead) → RefractedSegment
  15. Segment((0, 0), (0, (-AxisHeight))) → YAxisDown
  16. If(xR ≥ 0, Angle[YAxisDown, RefractedSegment], Angle[RefractedSegment, YAxisDown]) → BB
  17. Point(xAxis) → Corner1
  18. Point(xAxis) → Corner4
  19. Polygon(Corner1, Corner4, Corner3, Corner2) → medium, a, b, c, d
  20. Vector(Interface, RefractedHead) → Refracted
  21. Textfield(n1) → InputBox1
  22. Textfield(n2) → InputBox2
  23. Vector(Interface, ReflectedHead) → Reflected
  24. Segment(Interface, ReflectedHead) → ReflectedSegment
  25. If(x(ReflectedHead) ≤ 0, Angle[YAxisUp, ReflectedSegment], Angle[ReflectedSegment, YAxisUp]) → AARefl
  26. Vector(Interface, RefractedHead) → TIR
  27. If(x(IncidentTail) ≤ 0, Angle[YAxisUp, IncidentSegment], Angle[IncidentSegment, YAxisUp]) → AACrit
  28. If(x(ReflectedHead) ≤ 0, Angle[YAxisUp, ReflectedSegment], Angle[ReflectedSegment, YAxisUp]) → AAReflCrit
  29. If(xR ≥ 0, Angle[YAxisDown, RefractedSegment], Angle[RefractedSegment, YAxisDown]) → BBCrit
  30. Polygon(Corner1_2, Corner4_2, Corner3_2, Corner2_2) → mediumn1, corner1_2, corner4_2, corner3_2, corner2_2
  31. Segment(Interface, (0, (-radius))) → YAxis
  32. Segment(Interface, (radius, 0)) → XAxis
  33. Angle(YAxis, XAxis) → BBCrit2
  34. Vector(Interface, RefractedHead) → TIR2