# 水波節線、腹線 > 作者:王一哲 > 日期:2018/2/2 本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案,網址為 https://ggbm.at/uSjh5KWT <br /> <img height="100%" width="100%" src="https://lh5.googleusercontent.com/0Sd0hl2EU-EMtgCcQqEaadFjoao7ST_8NeBnUleg2aCN_5lt3rSbkcaJLo1WkibgfVl_lONgd-lG8b3Cws0jnji0LB-VEfoyMmGJnrdFENzWLB_mTwBSzjnwsIkRbiycyMY6ZAKT" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">L = 12、λ = 2 ~ 12 的節線、腹線位置</div> <br /> ## 繪圖步驟 1. 先在繪圖區上新增兩個點波源S<sub>1</sub>、S<sub>2</sub>的位置,選取工具列上的**新點**接著用滑鼠在繪圖區x軸上點左鍵兩下,或是直接用指令 ```latex S_1 = Point({-6, 0}) S_2 = Point({6, 0}) ``` <br /> <img height="30%" width="30%" src="https://lh5.googleusercontent.com/DSlZuqlgymniRfO97qSq7yiIcvRgjcByny9ta2lrcbs20HlnDxSzJmjTAQXLU1OAhOO-NxoMPOirHWU45SPVb8LvEAZxAzvvzZ2smQ6YCbVEDEJdKCCORZFJ3xHIypYKSrJG0-HD" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">工具:新點</div> <br /> 2. 找到S<sub>1</sub>、S<sub>2</sub>的中點C,選取工具列上的**中心點**接著用滑鼠在S<sub>1</sub>、S<sub>2</sub>上各點左鍵一下,或是直接用指令 ```latex C = Midpoint(S_1, S_2) ``` <img height="30%" width="30%" src="https://lh4.googleusercontent.com/NZ-H40QXg-Ht7ZSqD-86FA15GQZCXQFN2-JG6HiXhzYByKHVnUepFBAroQBxQBNlaJRoZIp9zgtVHz3Lkun_PcFMd08UR5zFfVa7yObnncHEsV82msuv46yB6kyh_WrJhR12O6Qp" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">工具:中心點</div> <br /> 3. 畫出過C點且垂直於x軸的直線,選取工具列上的**垂直線**接著用滑鼠在C和x軸上各點左鍵一下,或是直接用指令 ```latex a = PerpendicularLine(C, xAxis) ``` <img height="30%" width="30%" src="https://lh3.googleusercontent.com/8IbPS-SDUokOKs6pOjrcEH4k4Sczopg8bHu39vRJ4uWOvE77APN2VVzCera4XFwtv93fwUpEgLdQNFUFa5qw_RtMnjXviatud-A7DxU2U-6JH-ti2raK1vO-zo_Xhhr9JN0Dq4sG" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">工具:垂直線</div> <br /> 4. 新增控制波長λ的數值滑桿,最小值2,最大值12,增量0.1,或是直接用指令 ```latex λ = Slider(2, 12, 0.1) ``` 5. 定義S<sub>1</sub>、S<sub>2</sub>之間的距離,其中 abs 代表取絕對值,例如 abs(-1.9) = 1.9。x(S_2)代表讀取S_2的x座標值。 ```latex len = abs(x(S_2) - x(S_1)) ``` 6. 定義腹點數量 n_a,其中 floor 代表無條件捨去,例如 floor(1.9) = 1。 ```latex n_a = floor(len / λ)*2 + 1 ``` 7. 定義節點數量 n_n,其中 round 代表4捨5入,例如 round(1.5) = 2。 ```latex n_n = round(len / λ)*2 ``` 8. 定義x方向單位向量u並設定為不顯示,這是等一下要畫射線用的,先設定好比較方便。 ```latex u = Vector((0, 0), (1, 0)) ``` 上式指令格式為 ```latex Vector(起點座標, 終點座標)。 ``` 9. 畫出右半邊的腹點 ```latex antinode = Sequence(Point({x(C) + λ/2*i, y(C)}), i, 0, (n_a - 1) / 2, 1) ``` 上式指令格式為 ```latex Sequence(含有變數i的表達式, i, i的初值, i的末值, 增量) ``` 增量的預設值為1,可以省略。這在這用的表達式為 ```latex Point({x(C) + λ/2*i, y(C)}) ``` 意思是在 (C點 x 座標 + i 個半波長, C點 y 座標)處畫點。i的末值為 (n_a - 1) / 2 是為了扣掉中央腹點後再除以2。 10. 畫出左半邊的腹點,由於圖形左右對稱,可以用鏡射的方式偷懶,選取工具列上的**線對稱**,接著用滑鼠在右半邊的腹點和直線a上各點左鍵一下,或是直接用指令 ```latex antinode' = Reflect(antinode, a) ``` 上式指令格式為 ```latex Reflect(物件名稱, 對稱線名稱) ``` <img height="30%" width="30%" src="https://lh4.googleusercontent.com/gqA7nQkq4y4NN1Ka39oGHXrOTQfakS8NUkmXuEeT0DtBPnGQvxCiLYlOHnIro5oyTqApCpY-FgbOXIgxVx6m5py5enJuKvOu651G50LZ66ROx7Awz4fuoScZPO4ta5AABB938mKX" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">工具:線對稱</div> <br /> 11. 畫出大部分的腹線 ```latex antinodeline = If(x(antinode((n_a + 1) / 2)) != x(S_2), Sequence(Hyperbola(S_1, S_2, antinode(i)), i, 1, (n_a + 1) / 2, 1), Sequence(Hyperbola(S_1, S_2, antinode(i)), i, 1, (n_a - 1) / 2, 1)) ``` 這應該是整個過程當中最麻煩的一個步驟,If 當中的條件是用來檢驗波源上是否正好為腹點,如果不是的話就將所有的腹線都畫出來,如果是的話不畫出最後一組腹線。會這麼麻煩是因為當波源上正好是腹點時,會有一條腹線是以波源為起點、向外延伸的射線。如果只用 ```latex Sequence(Hyperbola(S_1, S_2, antinode(i)), i, 1, (n_a + 1) / 2, 1) ``` 當波源上正好是腹點時圖形會變為下圖。還有用到繪製雙曲線的指令,格式為 ```latex Hyperbola(焦點1, 焦點2, 除了焦點外任一點) ``` 我們用 Sequence 將 antinode 串列裡的腹點依序代入,由於雙曲線左右對稱,所以只要代入右側的腹點即可。 <img height="100%" width="100%" src="https://lh6.googleusercontent.com/SRbEeXP-zi7XA1GXd1kHRSm85zdAvnCcdusNkR5UjmR_KbtOcMeJdU9IVZQeeuy8O6Zdx64nlshURST1Hq7qq7lGJiBaXTi-N5Z4oq6jwtZPnSGHhThSKWKBiDq1jdLjmlSeHEZu" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">效果較差的腹線</div> <br /> 12. 畫出波源上的腹線 ```latex r_a = If(x(antinode((n_a + 1) / 2)) == x(S_2), Ray(S_2, u)) ``` 當波源上有腹點時才畫。另外用到繪製射線的指令,格式為 Ray(起點, 射線方向的向量)。再用線對稱畫出另一邊的腹線 ```latex r_a' = Reflect(r_a, a) ``` <img height="100%" width="100%" src="https://lh6.googleusercontent.com/5AwBc0FhiAmTEKMvGxutJx2jaxuWKKwzxm74qtBJuGlx62z0OPqldn3bqhk7xossCZKOmdQZTkOO9e96EARXkua5L5BNVoZsSN4094nS9scjy36xCXAxbhm7cMuqSQJ1wR33IejD" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">效果較好的腹線</div> <br /> 13. 畫出大部分的節線 ```latex nodeline = If(x(node(n_n / 2)) != x(S_2), Sequence(Hyperbola(S_1, S_2, node(i)), i, 1, n_n / 2, 1), Sequence(Hyperbola(S_1, S_2, node(i)), i, 1, n_n / 2 - 1, 1)) ``` 14. 畫出波源上的節線 ```latex r_n = If(x(node(n_n / 2)) == x(S_2), Ray(S_2, u)) r_n' = Reflect(r_n, a) ``` <img height="100%" width="100%" src="https://lh3.googleusercontent.com/6ox5J6t2BYtOsmM2QUl9vHEcHKaCBqsQT1FDJi5PVV97UqrbCX2Z6iIukH-iDBoQqfB3pVyUrva22CxqO-CKscvFlv72w5W0btpGj2sgdfVeOR-J4dXvk8X5yv9EsKerkygcG-KS" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">效果較好的節線</div> <br /> 15. 畫出波峰波前 ```latex crest = Sequence(Circle(S_1, λ*i), i, 1, n_n) crest’ = Sequence(Circle(S_2, λ*i), i, 1, n_n) ``` 16. 畫出波谷波前 ```latex trough = Sequence(Circle(S_1, λ*(i - 0.5)), i, 1, n_n) trough’ = Sequence(Circle(S_2, λ*(i - 0.5)), i, 1, n_n) ``` 17. 新增控制是否顯示波前的核取方塊 ```latex front = Checkbox({crest, crest’, trough, trough’}) ``` 核取方塊的指令格式為 ```latex Check({物件1, 物件2, …}) ``` 其實 Checkbox 代表布林值,打鈎時為 true 顯示物件,沒打鈎時為 false 隱藏物件。 <img height="100%" width="100%" src="https://lh6.googleusercontent.com/NgeT2qQ-hWmgnJrjuyNlnClktxfMBhv6C9dZAkvH5QUDPkXbgnhHhkKwf-CnAVGGiv4ufHmdzbWxkIoWyAmpGsyyd0K1Y3BsN24QFN8ozHcywwM0whBqoMQolFVFSD2hF-wFB-w7" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">同相位干涉範例(顯示波前)</div> <br /> <img height="100%" width="100%" src="https://lh5.googleusercontent.com/xq7waa6OBgSL4ApDWlNz3Fj-yUrpOzxMRKeZNLgViU-XALKs9DmlZbiacSm3BWLKjPJ5-nFaivYljKewzAvy28Huz5MnTYaakLgS2rwqg_ZsfvNW8W5fZ8weST3qLOgmFvf6BtjQ" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">同相位干涉範例(不顯示波前)</div> <br /> ## 結論 雖然使用工具列及滑鼠就能畫出許多有用的圖,雖然用指令繪圖比較麻煩,但是有一些效果只有用指令才能做到,值得花時間學習指令的用法。另外還有一個必須克服的麻煩,就是在搜尋資料時通常英文的資料遠比中文的資料還多,尤其是像這類由國外開發的軟體更是如此。感謝各位能夠看到最後。 <br /> ## 相關指令的官方說明書 1. 點 https://wiki.geogebra.org/en/Point_Command 2. 中心點 https://wiki.geogebra.org/en/Midpoint_Command 3. 垂直線 https://wiki.geogebra.org/en/PerpendicularLine 4. 數值滑桿 https://wiki.geogebra.org/en/Slider_Command 5. 向量 https://wiki.geogebra.org/en/Vector_Command 6. 線對稱 https://wiki.geogebra.org/en/Reflect_Command 7. 串列 https://wiki.geogebra.org/en/Sequence_Command 8. 雙曲線 https://wiki.geogebra.org/en/Hyperbola_Command 9. 核取方塊 https://wiki.geogebra.org/en/Checkbox_Command <br /> --- ###### tags:`GeoGebra`