作者:王一哲
日期:2018/2/2
本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案,網址為 https://ggbm.at/uSjh5KWT
S_1 = Point({-6, 0})
S_2 = Point({6, 0})
C = Midpoint(S_1, S_2)
a = PerpendicularLine(C, xAxis)
新增控制波長λ的數值滑桿,最小值2,最大值12,增量0.1,或是直接用指令
λ = Slider(2, 12, 0.1)
定義S1、S2之間的距離,其中 abs 代表取絕對值,例如 abs(-1.9) = 1.9。x(S_2)代表讀取S_2的x座標值。
len = abs(x(S_2) - x(S_1))
定義腹點數量 n_a,其中 floor 代表無條件捨去,例如 floor(1.9) = 1。
n_a = floor(len / λ)*2 + 1
定義節點數量 n_n,其中 round 代表4捨5入,例如 round(1.5) = 2。
n_n = round(len / λ)*2
定義x方向單位向量u並設定為不顯示,這是等一下要畫射線用的,先設定好比較方便。
u = Vector((0, 0), (1, 0))
上式指令格式為
Vector(起點座標, 終點座標)。
畫出右半邊的腹點
antinode = Sequence(Point({x(C) + λ/2*i, y(C)}), i, 0, (n_a - 1) / 2, 1)
上式指令格式為
Sequence(含有變數i的表達式, i, i的初值, i的末值, 增量)
增量的預設值為1,可以省略。這在這用的表達式為
Point({x(C) + λ/2*i, y(C)})
意思是在 (C點 x 座標 + i 個半波長, C點 y 座標)處畫點。i的末值為 (n_a - 1) / 2 是為了扣掉中央腹點後再除以2。
畫出左半邊的腹點,由於圖形左右對稱,可以用鏡射的方式偷懶,選取工具列上的線對稱,接著用滑鼠在右半邊的腹點和直線a上各點左鍵一下,或是直接用指令
antinode' = Reflect(antinode, a)
上式指令格式為
Reflect(物件名稱, 對稱線名稱)
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))
Sequence(Hyperbola(S_1, S_2, antinode(i)), i, 1, (n_a + 1) / 2, 1)
Hyperbola(焦點1, 焦點2, 除了焦點外任一點)
r_a = If(x(antinode((n_a + 1) / 2)) == x(S_2), Ray(S_2, u))
r_a' = Reflect(r_a, a)
畫出大部分的節線
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))
畫出波源上的節線
r_n = If(x(node(n_n / 2)) == x(S_2), Ray(S_2, u))
r_n' = Reflect(r_n, a)
畫出波峰波前
crest = Sequence(Circle(S_1, λ*i), i, 1, n_n)
crest’ = Sequence(Circle(S_2, λ*i), i, 1, n_n)
畫出波谷波前
trough = Sequence(Circle(S_1, λ*(i - 0.5)), i, 1, n_n)
trough’ = Sequence(Circle(S_2, λ*(i - 0.5)), i, 1, n_n)
新增控制是否顯示波前的核取方塊
front = Checkbox({crest, crest’, trough, trough’})
核取方塊的指令格式為
Check({物件1, 物件2, …})
其實 Checkbox 代表布林值,打鈎時為 true 顯示物件,沒打鈎時為 false 隱藏物件。
雖然使用工具列及滑鼠就能畫出許多有用的圖,雖然用指令繪圖比較麻煩,但是有一些效果只有用指令才能做到,值得花時間學習指令的用法。另外還有一個必須克服的麻煩,就是在搜尋資料時通常英文的資料遠比中文的資料還多,尤其是像這類由國外開發的軟體更是如此。感謝各位能夠看到最後。
GeoGebra