Google Classroom
GeoGebraGeoGebra Classroom

06 橢圓拋物面上的光線反射探討

旋轉拋物面的多次反射示意圖
旋轉拋物面的多次反射示意圖
從旋轉拋物面的光學性質不難得知,不論是接收訊號的拋物面天線、蝶式聚熱太陽能的聚光盤、手電筒的聚光杯等等,所使用的形狀,都是旋轉拋物面。 因為只要進入旋轉拋物面的光線/訊號平行對稱軸,都會聚集到旋轉拋物面的焦點;而從拋物面的焦點發出去的光線/訊號,也都會平行對稱軸向外射出。 那麼,如果使用橢圓拋物面的話,這些平行射向橢圓拋物面的光線,會發生什麼事情呢? 那就先來看看橢圓拋物面的特性。

橢圓拋物面

若用一個與對稱軸垂直的平面,切過橢圓拋物面,截痕即是一個橢圓;若用一個包含對稱軸的平面,切過橢圓拋物面,其截痕仍是拋物線,但會因為切的角度不同而截出開口大小也不相同的拋物線,當然,它們的焦點也都不在同個位置。

法線製作

在之前的作品4之中,為了做出法線,我們使用了一個方法: 對旋轉拋物面z=a(x2+y2) ,過拋物面上P點的法線,可使用以下指令製作: Line( P , ( 0 , 0 , z(P) + 1/(2a) ) 由於旋轉拋物面所截出的拋物線,其開口大小都一樣;但是,橢圓拋物面的截出的拋物線,其大小都不相同,這也代表各個拋物線所使用的係數a都是不同的。 那麼,只要我們能夠每次都推算出當時拋物線的係數a之值,上次製作拋物面法線的技巧,仍舊可以使用。
側視橢圓拋物面
側視橢圓拋物面
參考上圖 B為橢圓拋物面上一點,圖中藍色拋物線,即B點所在的截痕拋物線。 h為B點到底部平面(平面)的距離,d則是B點到對稱軸(軸)的距離。 若B=(),則h= , d= 將其代入到常用的二次函數形式,來推得係數a h=ad => a = 那麼,對於一個在橢圓拋物面上的P點,其法線就可寫成 Line( P , ( 0 , 0 , ) 既然有了法線,那模擬光線反射就不是問題了。 不過在此處,我們想要討論的,是光線平行對稱軸,射向橢圓拋物面的情形, 所以只需要做一次~兩次反射即可。

在此處製作 橢圓拋物面上的光線反射(平行對稱軸)

步驟1 打開3D繪圖區,製作所需之數值滑桿。

(1) 在"檢視"之中操作,開啟3D繪圖區。   這次因為需要數值滑桿,所以主繪圖區不要關閉,但是可以將主繪圖區的格線與座標軸隱藏。 (2) 製作數值滑桿b,用於調控橢圓拋物面的形狀。 名稱:b  類型:數值  最小:3  最大:5  增量:0.1 (3) 製作數值滑桿r,用於調控光源起點的位置。 名稱:r  類型:數值  最小:-9  最大:9  增量:0.2 (2) 製作數值滑桿θ,用於調控光源起點的位置。 名稱:θ 類型:角度  最小:0°  最大:360°  增量:1°

步驟2 製作光源起點A、橢圓拋物面以及最初的反射點B

(1) 輸入指令:A = rotate( (r,0,10) , θ , z軸 ) 。  .這樣A點就是一個在半徑為r、圓心為(0,0,9)的水平面圓上的點了。  .操作數值滑桿r,θ就能調整A點位置。 (2) 在指令列輸入指令:z =x^2 / 25 + y^2 / b^2  .確認一下拋物面的名稱是否為f,以下以拋物面名稱為f為例去操作  ,當b=5時,f即是旋轉拋物面 (4) 製造當光線從A平行對稱軸往下射時,光線在拋物面上的反射點B。  輸入指令 B = Intersect(f, Ray(A, A+(0,0,-1) ) ) (5) 製作向量AB,作為光線的示意。 PS: 用方程式製作的曲面,會是無限延伸的,有的時候可能會遮蔽視線。這時候就可以靠參數曲面,來製作一個有邊界的曲面來模擬了。 輸入指令 S = Surface(5k cos(θ), b*k sin(θ), k², k, 0, 4, θ, 0, 2π) 接著再將原本的拋物面f隱藏。 但注意,參數曲面無法用來製作交點或切線等等,所以指令輸入時,仍要使用原本的拋物面方程式f 。
使用參數曲面指令Surface製作的橢圓拋物面
使用參數曲面指令Surface製作的橢圓拋物面

步驟3 製作反射光線

在B點上的法線為 Line( B , ( 0 , 0 , z(B) + (x(B)^2+y(B)^2 )/( 2*z(B) ) ) ) , 但法線是用來幫我們找出對稱點,也就是光線的走向。這裡我們就不再製造出法線。 (1) 做點A對「B的法線」之對稱點A', 輸入指令A' = Reflect( A , IF(z(B)!=0 , Line( B , ( 0 , 0 , z(B) + (x(B)^2+y(B)^2 )/( 2*z(B) ) ) ) , z軸)) 。 這裡這樣設定,是因為當A在z軸上時,第一個反射點B會變成(0,0,0),那上述的法線的寫法,就會出現分母為0的作物情形。而當B = (0,0,0)時,不難想像,其法線就是z軸。 (2) 做出射線r1,輸入指令 r1 = Ray( 0.99*B+0.01*A' , A' )。 (3) 做出射線r1與拋物線f的交點,C = intersect( r1,f )。 (4) 製作向量BC,作為光線的示意。

步驟4 製作下一個反射

(1) 利用前一個反射點,做點B對「C的法線」的對稱點B', 輸入指令Reflect( B , Line( C , ( 0 , 0 , z(C) + (x(C)^2+y(C)^2 )/( 2*z(C) ) ) ) )。 此處不做像上一步驟那麼複雜的設定,是因為我們現在考量的情形,是光線一開始就平行對稱軸往下射。而在這種情況下,只有第一次反射時的反射點,有機會變成(0,0,0)。 (2) 做出射線r2,輸入指令 r2 = Ray( 0.99*C+0.01*B' , B' )。 因為光源是平行對稱軸射向拋物面,所以最多只會有兩次的反射。 這次的反射光線,就不會再碰到拋物面了。

步驟5 調整特殊情形的射線顯示,並隱藏不必要物件

(1) 當起始光源A到B之間會通過焦點時(A在z軸上,B為(0,0,0) ),光線反射一次後會遠離拋物線,所以要讓射線r1顯示。 將射線r1的顯示條件設定為「 z(B) == 0 」,同時製造向量BA',讓射線r1看起來更有方向感,並使該向量的顯示條件亦設為「 z(B) == 0 」。 (2) 當起始光源A到B之間沒有通過焦點時,光線反射兩次後會遠離拋物線,所以要讓射線r2顯示,用來表示射向無限遠處的光線。 這裡不需多做設定,讓r2顯示就好。當B=(0,0,0)時,射線r2就會因為下一個反射點C不存在,所以r2也會跟著不存在。 但為了讓射線r2顯示時更具有方向性,這裡就要製造向量CB' (3) 隱藏不必要出現的對稱點。

步驟6 製作反射光線與對稱軸的交點

(1) 製作射線r1和z軸的交點,輸入 F = Intersect( r1 , z軸 ) (2) 製作向量BF,來強調光線與對稱軸的交點。

步驟7 拉動數值滑桿r、θ 來觀察光線與對稱軸的交點

(1) 當你固定θ時,改變r的數值,你可以觀察到A點會在一線段上移動。此時光線與對稱軸(z軸)的交點固定不變。 (2) 當你改變θ的數值時,光線與對稱軸(z軸)的交點會不斷變動,但是固定在一個線段內。
Image