Total Internal Reflection Simulation
Loading the math board and drawing, please wait…
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
If(n1 > n2, asin(n2 / n1), 0) → thetacIf(n1 ≤ n2, (radius, 0), ((radius * cos(π / 2 - thetac)), (radius * sin(π / 2 - thetac)))) → CircleRightIf(n1 ≤ n2, ((-radius), 0), ((radius * cos(π / 2 + thetac)), (radius * sin(π / 2 + thetac)))) → CircleLeftSequence(((radius * cos((i * π / N))), (radius * sin((i * π / N)))), i, 0, N) → CirclePointsJoin({CirclePoints, CriticalAngles}) → AllPointsPoint(yAxis) → InterfacePoint(AllPoints) → IncidentTailCircleArc(Interface, CircleRight, CircleLeft) → CircleSegment(Interface, IncidentTail) → IncidentSegmentVector(IncidentTail, Interface) → IncidentLength(Incident) → MagSegment((0, 0), (0, AxisHeight)) → YAxisUpIf(x(IncidentTail) ≤ 0, Angle[YAxisUp, IncidentSegment], Angle[IncidentSegment, YAxisUp]) → AASegment(Interface, RefractedHead) → RefractedSegmentSegment((0, 0), (0, (-AxisHeight))) → YAxisDownIf(xR ≥ 0, Angle[YAxisDown, RefractedSegment], Angle[RefractedSegment, YAxisDown]) → BBPoint(xAxis) → Corner1Point(xAxis) → Corner4Polygon(Corner1, Corner4, Corner3, Corner2) → medium, a, b, c, dVector(Interface, RefractedHead) → RefractedTextfield(n1) → InputBox1Textfield(n2) → InputBox2Vector(Interface, ReflectedHead) → ReflectedSegment(Interface, ReflectedHead) → ReflectedSegmentIf(x(ReflectedHead) ≤ 0, Angle[YAxisUp, ReflectedSegment], Angle[ReflectedSegment, YAxisUp]) → AAReflVector(Interface, RefractedHead) → TIRIf(x(IncidentTail) ≤ 0, Angle[YAxisUp, IncidentSegment], Angle[IncidentSegment, YAxisUp]) → AACritIf(x(ReflectedHead) ≤ 0, Angle[YAxisUp, ReflectedSegment], Angle[ReflectedSegment, YAxisUp]) → AAReflCritIf(xR ≥ 0, Angle[YAxisDown, RefractedSegment], Angle[RefractedSegment, YAxisDown]) → BBCritPolygon(Corner1_2, Corner4_2, Corner3_2, Corner2_2) → mediumn1, corner1_2, corner4_2, corner3_2, corner2_2Segment(Interface, (0, (-radius))) → YAxisSegment(Interface, (radius, 0)) → XAxisAngle(YAxis, XAxis) → BBCrit2Vector(Interface, RefractedHead) → TIR2