01 拋物線上的光線反射(一次)

拋物線的一次反射示意圖
在此處製作 拋物線上的光線反射(一次)
步驟1 製作拋物線
在指令列輸入指令:y = 0.5*x^2
步驟2 製作光源起點A,以及最初的反射點B
.確認一下拋物線的名稱是否為f,以下以拋物線名稱為f為例去操作[br](1) 在拋物線內製造一新點A(A點必須要在拋物線的[b]上方[/b])[br](2) 在[u]拋物線上[/u]製造一點B。[br](3) 製作向量AB,作為光線的示意。
步驟3 製作拋物線在B點上的切線,再製作拋物線上在B點上的法線
(1) 製作切線:可以利用切線工具[icon]/images/ggb/toolbar/mode_tangent.png[/icon],或者輸入指令Tangent(B, f),得到直線g。[br](2) 再製作法線:可利用垂直線工具[icon]/images/ggb/toolbar/mode_orthogonal.png[/icon](垂直切線g、過B點),或輸入指令PerpendicularLine(B,g),得到直線h。
步驟4 製作反射光線
.先做[b]反射路徑[/b]:這裡會利用射線來製造出光線下一次碰到拋物線的位置。[br](1) 做點A對法線h的對稱點A',可用線對稱工具[icon]/images/ggb/toolbar/mode_mirroratline.png[/icon]或者指令Reflect(A, h)。[br](2) 做出射線BA',可用射線工具[icon]/images/ggb/toolbar/mode_ray.png[/icon]或者指令Ray(B, A'),得到射線i。(注意B, A'的順序)[br](3) 做出射線BA'與拋物線f的交點[icon]/images/ggb/toolbar/mode_intersect.png[/icon]。此處交點可能會做出兩個點,一個與B點重合,另一個點即是下一次光線碰到拋物線的位置,將其重新命名為C。[br](4) 製作向量BC[icon]/images/ggb/toolbar/mode_vector.png[/icon],作為光線的示意。
步驟5 隱藏不必要的物件
.切線、法線和射線,在這裡都是不需要顯示的物件,將其隱藏。[br].對稱點A'亦不需要顯示,將其隱藏。[br]

03 (旋轉)拋物面上的光線反射(多次)

旋轉拋物面的多次反射示意圖
旋轉拋物面
我們在此處所要討論的是橢圓拋物面中的旋轉拋物面。[br][br]若用一個與對稱軸垂直的平面,切過旋轉拋物面,截痕即是一個圓;若用一個包含對稱軸的平面,切過旋轉拋物面,其截痕會是一群焦點、開口大小一樣的拋物線。也就是說,將一個拋物線,對其對稱軸旋轉,所圍得的圖形,即是旋轉拋物面。[br][br]其中一種形式的旋轉拋物面之方程式為:[i]z[/i]=[i]a[/i]([i]x[/i][sup]2[/sup]+[i]y[/i][sup]2[/sup])。[br]用此方程式表示的旋轉拋物面,其對稱軸為[i]z[/i]軸。[br]而這裡我們只先討論旋轉拋物面,是因為旋轉拋物面有固定的焦點。這表示所有平行對稱軸的入射光線,反射路徑都會經過焦點,也就是能將光線聚集在一點上。這也代表,不論是衛星訊號接收器或碟式聚光太陽能熱發電,都是用旋轉拋物面。
切平面與法線
在三維空間中,對旋轉拋物面上的一點而言,該點的"切線"會有無限多條,即使鎖定其中一條"切線",過該點且垂直該"切線"的直線亦有無限多條,這樣就不容易找到我們所需要的法線。[br][br]到了三維空間,你可能會想:[br]「我們只要找出拋物面在該點的"切平面",就可以找出過該點且垂直"切平面"的法線了。」[br]但是找出切平面這件事情,除了超出了高中職所學之外,Geogebra也沒有工具或指令能夠直接做出切平面,[br][br]當然還是有方法的,只要我們不依賴切線或切平面就找出法線。而讓我們先回到二維平面去看法線與拋物線的性質。[br][br][br]參考下圖,設拋物線方程式為[i]y[/i]=[i]ax[/i][sup]2[/sup],[br]A、B為拋物線上兩點,而各別通過A、B的兩條斜直線為A、B在拋物線上的法線。[br] [br]這裡會有一個很特別的情形,當我們去找出兩條法線與[i]y[/i]軸的交點A0、B0時,會發現一個相同點:[br]A、A0的[i]y[/i]座標之差,剛好等於B、B0的[i]y[/i]座標之差。不論A、B怎麼移動,都會有這樣子的特性。[br][br]更特別的,它們的差距,剛好等於[math]\frac{1}{2a}[/math]。這表示,我們能用一個方法來製造法線:[br][br]利用拋物線上一點P和P0所做出的直線,當作P在拋物線上的法線。[br]其中,P0=(0,[i]y[/i](P)+[math]\frac{1}{2a}[/math]), [i]y[/i](P)即是P點的[i]y[/i]座標。
法線與拋物線 [i]y[/i]=[i]ax[/i][sup]2[/sup] 之關係
類似地,這個方法也可以在旋轉拋物面上使用.只有一些地方不太一樣。[br]例如例子中,拋物線的方程式是[i]y[/i]=[i]ax[/i][sup]2[/sup] ,而這裡旋轉拋物面所使用的方程式為[i]z[/i]=[i]a(x[/i][sup]2[/sup]+[i]y[/i][sup]2[/sup]) ,在這之中,拋物線的對稱軸為y軸,而旋轉拋物線的對稱軸則是z軸。[br][br]所以修改後的法線製作方法如下:[br]利用拋物面上一點P和P0所做出的直線,當作P在拋物線上的法線。[br]其中,P0=(0,0,[i]z[/i](P)+[math]\frac{1}{2a}[/math]), [i]z[/i](P)即是P點的[i]z[/i]座標。[br]所以,製作法線的指令,可輸入 Line( P , ( 0 , 0 , [i]z[/i](P) + 1/(2[i]a[/i]) )[br][br]接著只要熟悉一下3D繪圖區的操作模式,就可以開始製作拋物面的光線反射了。
在此處製作 拋物線上的光線反射(多次)
步驟1 打開3D繪圖區,關閉主繪圖區。
在"檢視"之中操作
步驟2 製作光源起點A、拋物面以及最初的反射點B
(1) 先製造一個新點A,不要製造成在軸上的點。[br](2) 在指令列輸入指令:z = 0.05(x^2 + y^2)  (此拋物面的焦點會位於(0,0,5) )[br] .確認一下拋物面的名稱是否為f,以下以拋物面名稱為f為例去操作[br](3) 調整點A的位置(A點必須要在拋物面的[b]上方[/b])[br](4) 在拋物面上製造一點B。[br] .記得移動視角,確認A,B兩點的位置。[br](5) 製作向量AB,作為光線的示意。
步驟3 製作反射光線
.法線是用來幫我們找出對稱點,也就是光線的走向。這裡我們就不再製造出法線。[br](1) 做點A對「B的法線」之對稱點A',[br]輸入指令Reflect( A , Line( B , ( 0 , 0 , z(B) + 10 ) ) )。[br](2) 做出射線,輸入指令Ray( 0.99*B+0.01*A' , A' ),並將其重新命名為r1。[br](3) 做出射線r1與拋物線f的交點,得到C點。[br](4) 製作向量BC,作為光線的示意。
步驟4 製作下一個反射點
(1) 利用前一個反射點,做點B對「C的法線」的對稱點B',[br] 輸入指令Reflect( B , Line( C , ( 0 , 0 , z(C) + 10 ) ) )。[br](2) 做出射線,輸入指令Ray( 0.99*C+0.01*B' , B' ),並將其重新命名為r2。[br](3) 做出射線r2與拋物面f的交點,得到D點。[br](4) 製作向量CD,作為光線的示意。
步驟5 重複步驟4,直到做出足夠的反射點
.當光線不是平行對稱軸或者經過焦點時,光線會在拋物線上反射無限次。[br].大多時候光線反射幾次後,就會跑到很遠的地方。所以只要做4~6次的反射,就足以應付大多數的情況了。
步驟6 調整特殊情形的射線顯示,並隱藏不必要物件
(1) 當起始光源A到B之間會通過焦點時,光線反射一次後會遠離拋物線,所以要讓射線r1顯示。[br]將射線r1的[b]顯示條件[/b]設定為「 x(B) == x(A') 」,同時製造向量BA',讓射線r1看起來更有方向感,並使該向量的[b]顯示條件[/b]亦設為「 x(B) == x(A') 」。[br][br](2) 當起始光源A到B的方向平行對稱軸時,光線反射兩次後會遠離拋物線,所以要讓射線r2顯示。將射線r2的[b]顯示條件[/b]設定為「 x(C) == x(B') 」,同時製造向量CB',讓射線r2看起來更有方向感,並使該向量的[b]顯示條件[/b]亦設為「 x(C) == x(B') 」。[br][br](3) 隱藏不必要出現的法線、射線和對稱點。

05-1 橢圓內的光線反射(試算表製作)

橢圓內的反射(200次)示意圖
橢圓內的反射
如果用焦點來看,橢圓光線反射的光學原理,與拋物線上的光學原理不太一樣。但是反射的情況還是類似的,都可以藉著切線、法線來推得光線反射的路徑。[br][br]而橢圓內的反射,我覺得是比拋物線上的反射有趣。就無限次反射的情形下,拋物線上的光線反射可能反射個幾次,就會超出我們的視線範圍;不過橢圓內的反射就永遠囿於橢圓之中,所有的反射的情形都可以看得到。而且大多時候,當反射次數夠多,累積的反射路徑就會變成橢圓或雙曲線的包絡線。[br][br]因為反射還是與切線、法線有關,所以之前用來製作拋物線反射的方法,可以直接用來製作橢圓內的反射。
在此處製作 橢圓上的光線反射(試算表製作)
步驟1 製作橢圓與打開試算表
(1) 在指令列輸入指令:x^2 /25 + y^2 /9 = 1 (長軸長10,短軸長3的橢圓)[br](2) 在"檢視"之中,打開試算表視窗
步驟2 製作光源起點A,以及最初的反射點B
.確認一下橢圓的名稱是否為eq1,以下以橢圓名稱為eq1為例去操作[br](1) 在橢圓內部製造一新點A。[br](2) 在[u]橢圓上[/u]製造一點B。[br](3) 製作向量AB,作為光線的示意。
步驟3 製作橢圓在B點上的法線
.相較於切線,實際上更重要的是[b]法線[/b]。[br].[u]這裡就不再另外製造出切線,而是將切線放入雙重指令。[/u][br].製作法線:輸入指令[u]PerpendicularLine(B, Tangent(B, eq1) )[/u],得到直線g。
步驟4 製作反射光線
(1) 做點A對法線g的對稱點A',可用線對稱工具或者指令Reflect(A, g)。[br](2) 做出射線,輸入指令[u]Ray( 0.99*B+0.01*A' , A' )[/u]。[br](3) 做出射線與橢圓eq1的交點,得到C點。
步驟5 將物件放入試算表
(1) 將點更名:A→A1、 B→A2、 C→A3、 。[br](2) 將過點A2(原本的點B)的法線,更名為B2 。[br](3) 將點A1(原本的點A)的反射點A',更名為C2 。[br](4) 將射線更名為D2 。[br](5) 將向量A1A2(原本的向量AB)更名為E2。
更名之後,物件就會被放到試算表之中
步驟6 隱藏不必要物件
隱藏不必要出現的法線、對稱點和射線。[br][br]而試算表之中的B,C,D欄,即是製作過程中,所製造出來的法線、對稱點和射線。[br]利用試算表的特性,將B,C,D欄全部框起來之後,將其物件隱藏。[br][br]PS:這裡我們先隱藏再作複製,是因為此次要複製出近千個物件,先將其隱藏,比較不會造成視覺上的混亂,也比較不會造成程式的負擔。
將B,C,D欄的物件隱藏
步驟6 利用試算表特性,複製指令
參考下圖操作[br](1) 在試算表上框起B2:E2,並將其複製到B3:E3 。[br](2) 接著在試算表上框起A3:E3,複製到A201:E201 。[br]如此,便能快速增加近199次的反射模擬。[br][br]PS:預設的試算表只有100列,必須先手動點擊第100列的任一儲存格,[br]再按住鍵盤的方向鍵"↓",就會快速擴展儲存格的列數。
將B2、C2、D2、E2複製到B3、C3、D3、E3
將A3、B3、C3、D3、E3複製到A4、B4、......、D201、E201
不需要調整特殊情形
橢圓內的反射,並不像拋物線在射過焦點之後會反射到無限遠處(無下一個反射點),所以不需要再另外調控射線的顯示與否。

拋物線的光線反射 獻給聰哥

Information