# 折射定律 > 作者:王一哲 > 日期:2018/2/8 折射定律 (law of refraction) 或稱為司乃耳定律 (Snell's law) 的型式為 $$n_1 \sin \theta_1 = n_2 \sin \theta_2$$ 當 $n_1 > n_2$ 時可以算出臨界角 $$\theta_c = \sin^{-1} \left(\frac{n_2}{n_1} \right)$$ 若 $\theta_1 > \theta_c$ 則發生全反射。本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案,網址為 https://ggbm.at/Xcxnvk2r </br> ## 折射定律步驟 1. 新增控制兩介質折射率 $n_1$、$n_2$、入射角 $\alpha$ 的數值滑桿,指令為 ```latex n_1 = Slider(1, 2, 0.1) n_2 = Slider(1, 2, 0.1) α = Slider(0°, 89°, 1°) ``` 再手動將 $n_1$ 調整為1,$n_1$ 調整為1.38,α 調整為 60°。 2. 在原點上新增點 O,在 x 軸上畫直線作為兩介質的交界面,在 y 軸上畫直線作為法線 ```latex O = Point({0, 0}) f = Line(O, xAxis) g = Line(O, yAxis) ``` 3. 在法線上新增點 A,再拖曳到(0, 4),畫上過點 A 並垂直於法線 g 的直線 h ```latex A = Point(g) h = PerpendicularLine(A, g) ``` 4. 將點 A 對點 O 順時鐘方向旋轉角度 α 變為點 A',畫出射線 i 作為入射光,再隱藏點 A' ```latex A' = Rotate(A, -α, O) i = Ray(O, A') ``` 5. 畫出射線 i 與直線 h 的交點 B,再畫出角 BOA 作為入射角 $\theta_1$ ```latex B = Intersect(h, i) θ_1 = Angle(B, O, A) ``` <img height="100%" width="100%" src="https://lh4.googleusercontent.com/lTDTAkteMarfb6bw3D2Q4IylKTea-8aqe8O9sWGReP_U9B7iGsrgIbKVE4D4e2IW2unF2rwf4VLV17iftGEsjBZc4LgN9wn0836Pjt9OG1-Tzq95nhudQ-yRR_gvJElsCcdXUfn8" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">折射定律範例步驟 1 ~ 5 成果</div> </br> 6. 計算 $n_1 > n_2$ 時的臨界角 $\theta_c$ ```latex θ_c = If(n_1 > n_2, (asin(n_2 / n_1) / π*180)°, 0°) ``` 上式中 $\mathrm{asin} = \sin^{-1}$,但是輸出的單位為弧度 (rad),**2π rad = 360°**,為了將單位換回 ° 因此加上了 **/ π*180°** 。 7. 計算折射角 β ```latex β = If(n_1 <= n_2 || θ_1 <= θ_c, (asin(n_1 sin(θ_1) / n_2) / π*180)°) ``` 上式中 **||** 代表**或**,當 $n_1 \leq n_2$ 或 $\theta_1 \leq \theta_c$ 成立時,用後面的式子計算折射角,若條件不成立則沒有定義折射角。 8. 在法線上新增點 C,再拖曳到(0, -4),畫上過點 C 並垂直於法線 g 的直線 k ```latex C = Point(g) k = PerpendicularLine(C, g) ``` 9. 將點 C 對點 O 順時鐘方向旋轉角度 β 變為點 C',畫出射線 j 作為折射光,再隱藏點 C' ```latex C' = RotateC, -β, O) i = Ray(O, C') ``` 10. 畫出射線 j 與直線 k 的交點 D,再畫出角 DOC 作為折射角 $\theta_2$ ```latex D = Intersect(k, j) θ_2 = Angle(D, O, C) ``` <img height="100%" width="100%" src="https://lh4.googleusercontent.com/ZNg4oAfO6mYRLe4FWJL5aMU6w9su-PmmrmUZmcuW9pL1neyCs1rM7dfCVCXbOBfFVp64gZlzcyBJY0xwVuwiTuLBsO-WQNkM6eQwBayyI97lxi6b0rt3YB4jRV-j9_dlJV22qTCp" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">折射定律範例步驟 6 ~ 10 成果</div> </br> 11. 畫出發生全反射時的反射光 ```latex l = If(n_1 > n_2 && θ_1 > θ_c, Reflect(i, g)) ``` 上式中 **&&** 代表**且**,當 $n_1 > n_2$ 與 $\theta_1 > \theta_c$ 都成立時射線 i 對法線 g 的線對稱。但是在輸入指令之後進到屬性裡面看定義會變成 ```latex If(n_1 > n_2 ∧ θ_1 > θ_c, Ray(Reflect(O, g), Reflect(A', g))) ``` 這是 GeoGebra 自動轉換的,不需要管它。 12. 將 $n_1$ 調整為1.5,$n_2$ 調整為1,試試看當 $\alpha$ 增加時會不會發生全反射,如果可以就成功了。 <img height="100%" width="100%" src="https://lh6.googleusercontent.com/--OZV5G0oeqqiq0ZzjR57up5VWBetnCLECda24jZMrFdQzLb3H4hgfDf2gI_XC5VDqwQ593CzkePin0wDat7U7Si5o7sXlHnm5gr4Ln0BYJEI0EcMLwTf0W0ow60yzXcjpYee9K7" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">折射定律範例步驟 11 ~ 12 成果</div> </br> 13. 再將 $n_1$ 調整為1,$n_2$ 調整為1.38,$\alpha$ 調整為 60°。選取測量距離工具,用滑鼠左鍵在點O、B上各點一下,標示OB之間的距離。接著用同樣的作法,標示OA、AB、OC、OD、CD之間的距離。 <img height="25%" width="25%" src="https://lh5.googleusercontent.com/GaCLqUgZaYRAQg64SnYI_jPxNm-gG7eWWDPX-ZZSRcLghLLbkKeckVZ4c4rt75mIqfd1NAnAARF8NRA1ORuWj2T2hNFxWMdfG-M_tE55JzoK7vds9LmJnF4pXQLm2O96fw5s0lZw" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center"> 測量距離工具選單</div> </br> 14. 用以下指令新增是否顯示角度、距離的核取方塊。 ```latex angle = Checkbox({θ_1, θ_2}) length = Checkbox({文字AB, 文字CD, 文字OA, 文字OB, 文字OC, 文字OD}) ``` <img height="100%" width="100%" src="https://lh5.googleusercontent.com/Cfuil79UPZWvvFp6geA4-XyokBukCgmxc1wk2x0pxGjVkdswqRxVh2HduV9Tiyp3Yjndc-tksy3pz1thFYXEEG0O4F3RZ4jdpHvexzIxEAFwXBHRt8aYUptV0Q-VrT2hnFxYr2nu" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center"> 折射定律範例最終成果</div> </br> ## 相關指令的官方說明書 1. 點 https://wiki.geogebra.org/en/Point_Command 2. 垂直線 https://wiki.geogebra.org/en/PerpendicularLine_Command 3. 線對稱 https://wiki.geogebra.org/en/Reflect_Command 4. 畫角度 https://wiki.geogebra.org/en/Angle_Command 5. 數值滑桿 https://wiki.geogebra.org/en/Slider_Command 6. 旋轉 https://wiki.geogebra.org/en/Rotate_Command 7. 射線 https://wiki.geogebra.org/en/Ray_Command 8. 條件 https://wiki.geogebra.org/en/If_Command </br> --- ###### tags:`GeoGebra`