# 折射定律
> 作者:王一哲
> 日期: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`