Java物理動畫


何謂 Java?

Java是最近幾年昇陽公司(Sun)所發展出來的一種『結構化物件導向的程式語言』。它最大的特色是Java編譯過的程式,不需要重新編譯便可以在不同的電腦作業系統下執行,這在電腦資訊網路盛行的現代環境裡更顯得重要。也因此Java的出現讓微軟(Microsoft)等其他主要電腦巨頭感受相當的壓力,從最初的排斥到最近昇陽、IBM與網際(Netscape)公司合組Java發展中心,可見Java的推出受到電腦使用者的歡迎程度。

Java是如何讓程式在不同電腦作業平台下皆能夠執行呢?基本方法是將電腦程式細分為最基本的工作項目。例如:開啟檔案,畫一個點等共通使用的項目,然後事先在不同電腦作業平台下建立程式庫(library),然後安裝在電腦上。所有的電腦作業平台只要有人依照相同Java規格發展出一套程式庫便可以共用。而Java程式編譯時,便將程式轉換成一項項的基本工作項目。由於Java編譯後的程式可視為工作項目的編碼(byte code),主要工作都在程式庫裡完成,因此Java編譯後的程式通常都很小(只有幾 kByte 幾十 kByte,和其他語言編譯的程式比起來,由於加上程式庫的內容,往往幾百 kByte MByte) 。當然執行時必須重新連結(link),速度上會稍慢,這是它的缺點。但是在電腦日新月異的現代,硬體上快速的發展使得大多數程式的設計發展時(除了學術上的研究外),速度已經不再是最主要考量因素。

Java的能夠快速發展,現代網路蓬勃的使用也是主要因素。Java程式可以透過網路傳輸後,在任何一個已經事先安裝Java程式庫的電腦上直接執行。由於Java的執行程式小,因此在網路傳輸擁擠的現況,更顯得重要。又由於程式是在傳輸到使用端電腦上直接執行,因此程式執行速度快。現今網路上的主要瀏覽器,如 Netscape Internet Explorer都已經內建Java程式庫,因此當閱覽具有Java程式的網頁(Web Page)時,便會自動將程式透過網路傳輸到使用端,然後自動執行,完全不需要受限於使用端(client)電腦的類別限制。更重要的是,只要在伺服器端(Server)將程式更新時,全球透過網路使用的程式便自動執行最新版的程式。

由於Java設計時便包含網路功能,也就是可以將電腦程式在伺服器上執行,然後將結果在使用端顯示出來。這對於需求快速運算速度的學術研究上尤其重要,在具有高速運算能力的電腦上執行運算需求高的工作,然後將結果透過網路在具有完善圖形使用者介面(Graphic User Interface)Java環境下顯示,可說是完美的組合。更由於它write once, run everywhere的特性,自動販賣機、金融提款機、電器機械自動控制系統等,各種需要在不同環境下使用的程式系統都已經開始朝Java招手。Java已經不再只限於是一種程式語言,目前已經朝成為一種新的電腦工作環境發展,讓所有不同電腦的軟硬體資源皆能夠共享。

結構化的程式當然是現代各種程式語言的特色,然而設計時如果沒有將程式的資料與程式一起考量,當處理的資料變化時,往往需要重新修改程式並重新編譯。然而物件導向的程式(例如C++Java)是將資料與程式在設計時便一起考量(將資料含在物件內),透過物件的功能函數與外界其他物件溝通。有如在設計電路時,將程式設計成一塊塊的積體電路(IC)。只要設計得當(以功能為考量),設計過的每一個小物件,都可以在未來的所有程式中重複使用。當更新程式功能時,只要修改相關的部份物件程式便可。更由於編譯的Java程式只是工作項目的編碼,因此只需編譯修改過的程式部份。不需要重新連結(link)成新的執行檔(連結的工作在執行時完成)。

Java設計時也考量原有其他語言程式大量程式庫的存在,因此設計程式介面,使得Java也可以使用原有的其他語言程式(例如 C)的程式庫。但如果那樣使用的話,使用其他語言程式的部份便只能在原有程式庫能執行的相同電腦作業環境下使用,喪失了Java主要優點之一。解決方法是使用上述伺服器—使用端的方式,在固定的伺服器上使用原有的程式庫。例如某數值運算軟體便發展出Jwave的介面,讓使用者透過網路與Java介面,在使用端顯示伺服器運算的結果與圖形。以上簡單介紹Java程式,詳細內容可親至 http://www.javasoft.com/ 瀏覽相關說明。最重要的一點是執行與發展Java程式的必要資源皆可以從網站上免費下載,並且附有詳細的解說.

何謂Java物理動畫?

往往教師想傳授的內容與希望學生學習的概念,和實際的學習程度有一段的差距。 藉由通常口述的教學方式時,這種差距更大。例如:路人向你問路時,由於對方對當地不熟悉才會迷路。當你告知對方時,由於腦中已有附近環境的圖像,因此很清楚所告訴對方的內容(何時左轉,再右轉等)。可是對方不見得完全清楚,何處會碰到被告知的特殊標誌然後轉彎。如果稍複雜的路線,往往需要再繼續問路。但是如果以繪簡圖的方式,甚至使用地圖則較清楚。事先如果看過動態的畫面,則不需要邊看地圖,也可以較方便的找到目的地。 所以如果能配合圖形或實物影像的方式,學生更容易領會課堂內容的情景,如果有動態畫面則學習效果將更好。 Java 物理動畫就是利用Java所設計的物理教學動畫程式,用來幫助學生更容易學習或領悟所介紹的物理概念。

國立台灣師範大學物理系的物理教學示範實驗室,是國內第一個自行設計Java物理動畫程式的網站,網站設立不久便成為蕃薯藤推薦精選網站之一(網址:http://www.phy.ntnu.edu.tw/class/demolab/index.html)。從85年11月設站至今,筆者已經陸續設計完成三十多個動畫程式。程式設計對象包含國中、高中與大一普通物理的程度。也曾有多位國小學生與教師要求希望也能有適合國小的動畫程式,因為時間與人力關係尚無法達成。目前在全球有11個網站有相同Java動畫網頁內容(以英文呈現,也同意對方翻譯成當地語言文字)。部份程式也已經提供美國某大學普通物理教科書作者作為新編教科書的部份內容。

以下簡單介紹幾個最受歡迎的動畫程式,詳細內容請自行上網閱覽。『透鏡與面鏡的成像』是筆者第一個發展的程式(如圖一)。使用者藉由滑鼠操作,便可以更改凹、凸透鏡或面鏡種類,或改變物高,物距,透鏡或面鏡焦距與位置等(也可以直接輸入數值)。程式會即時自動更新光徑與成像位置並顯示相關物理參數。本程式最初只有凹、凸透鏡功能,程式面版也較簡單。後來根據網友的建議,逐步修改增加面鏡,也區分接近光軸理想的光徑與實際根據反射定律的情形。網站上大多數Java程式現在呈現的版本,都是上網後經過全球多位物理教師使用後提出修改意見,根據他們所提供的建議,重新組織後再修改完成的。

圖一:『透鏡與面鏡的成像』動畫程式靜態面版

『反應時間與行車安全距離測定』的動畫(如圖二),藉由程式內紅綠燈的變換,當發現燈號由綠燈隨機轉為紅燈時,讓使用者點一下滑鼠鍵,當做是啟動剎車。程式內移動的紅色轎車會繼續行進直到剎車後減速,參數已設計成近似實際行車狀況。使用者可變換車速,摩擦係數等,程式也會顯示出整段過程中車速與距離的關係。讓學生理解車速及個人反應時間與跟車距離 + 煞車距離 = 行車安全距離之間的關係。想一想,為何高速公路上發生車禍大多是連環車禍?提醒同學運用所學過的運動學知識,做為平日開(騎)車的參考依據。德國某交通相關雜誌作者也曾來信索取資料,專文報導相關資料。本程式也同意提供台北市交通博物館剛推出『汽車安全屋』單元的設計者,將Java程式加在設計單元內。(筆者寫稿時,恰聽到收音機報導汽車安全屋當天開始展示)。

圖二:『反應時間與行車安全距離測定』動畫程式靜態面版

從自己所設計的『彩虹的物理』動畫程式(如圖三)時,當加上偏振情形後,筆者才發現原來所形成的彩虹有挺高的偏振比率。藉由滑鼠可以改變入射光相對水滴的入射位置,程式自動畫出光徑並顯示不同偏振的強度,可清楚看出每一個過程的變化。讓學生藉由操作中體會出『不同的入射位置皆會有經兩次折射,一次反射的光線在不同角度射出,為何只有在特定角度看到彩虹?』。也可以改變不同的入射光及各種光線同時入射的情形。藉由動畫的呈現可以讓物理量間複雜的關係式,以較直接的方式呈現,尤其經過數個複雜過程後,物理量間的關係不是很容易直接看出來的。但是藉由程式處理後加以適當的圖形顯示,可以較容易清楚的體會其間的關係,有更直接的物理感覺。

圖三:彩虹的物理』動畫程式靜態面版

波動經過不同介質時折射與反射的現象,微觀上是介面上質點受波動影響後形成新波源,所產生的波在不同介質內疊加後所形成(如圖四)。在自己設計的Java程式完成後,親眼目睹過去腦海中不易有實質影像的疊加過程,對整個現象體會也更深入。並藉由比較光與聲音入水的折射後,希望同學可以體會出在岸上如何呼叫水底的同伴才有效。

圖四:『波行進至兩介質介面時的行為』動畫程式靜態面版

當兩個振幅一樣,只有行進方向相反的正弦波疊加時會形成駐波,這是大家都很清楚的。可是如果振幅不同時會如何呢?我初次用滑鼠改變其振幅時,看到所顯示結果,首先讓我聯想到的是海邊的波浪。介質會形成近圓形的運動軌跡。因為當海浪打到岸邊反射時,反射波強度減弱,再與入射波干涉便會形成所看到的現象,這和程式上顯示的情形相類似。這是我未曾在任何書刊看過或聽過類似的解說方式(如果是我孤陋寡聞請指正),不妨自己上網玩一玩,試一下!

(註:由於橫波只會造成介質在與波的行進垂直方向上運動,至於介質也會有前後運動(如同橢圓軌道運動,表示必然有縱波的成分在內)。

目前國外的Java物理動畫網站,以TIP/TOP VLAB為主要登記網站。(網址為 http://www.tp.umu.se/TIPTOP/VLAB/)。本網站的程式是該站上登記最多的程式來源。除了我們所登記的程式外,其他的程式偏向屬於大學程度的物理動畫程式較多。日本有位高中教師也設計了不少程式,(網址為 http://www.bekkoame.or.jp/~kamikawa/java_e.htm)。最初讓我引起設計Java動畫程式的是 Univ. of Oregon Vlab的網站,Vlab代表Virtual Physics Laboratory(虛擬實驗室網址為http://jersey.uoregon.edu/vlab/)。 當我觀賞過他們所設計相當不錯的一些程式後,心想為何不自己也試一試!經過半年多的努力後,該校物理系負責的教授注意到台灣師大的物理動畫網站。因此特別來信要求設置複製網頁(Mirror Site),以方便他平日教學時展示。以下網站,如http://www.gamelan.com/pages/Gamelan.educational.physics.html

SciPhysics Virtual Lab(http://heart.engr.csulb.edu/~rtoossi/physics/demos.html)與http://didaktik.physik.uni-wuerzburg.de/~pkrahmer/home/ 等則收集不少物理相關動畫。較新的來源是Interactive Physics and Math with Java也發表不少自行設計的程式(網址:http://www.lightlink.com/sergey/java/)。以上這些資料隨時到國立台灣師範大學物理系的物理教學示範實驗室的網頁都會幫您指引,歡迎隨時上網參觀。

國外不少普通物理或高中教師在教完相關單元後,會要求學生上網『玩一玩』本站設計的動畫程式當作課後作業。由於國外上網連線速度上有時會有問題,尤其直接於上課時作為教學示範單元易造成困擾。因此答應他們的要求,提供程式並同意他們設置複製網頁,也歡迎他們翻譯成當地語言文字。對於部份表示透過網路教學不方便的教師,也同意他們直接在未上網的電腦上直接執行以輔助教學。只要是不涉及商業行為的教學活動,已經提供不少國外教學單位Java動畫程式。由於不斷有建議的信件,程式也一直不斷的在修正。國內的網友大概比較客氣,相對很少有建議的對話與溝通。希望物理界同仁不要客氣盡量批評指教,才能使程式對學生更有幫助。為了維持程式內容的一致性,而且國內上網也很快速,因此並未提供國內網站複製的要求(唯因東區傳輸稍慢,最近同意台東某國中教師的要求在台東設置複製網頁)。複製的網站通常每隔兩個月,會收到本站主動寄出的最新修正版本。

為了鼓勵國內教師願意共同參與物理教學動畫的設計,以嘉惠同學。如果真有需要,願意提供Java原始程式作為設計程式時初步參考,並歡迎來信彼此討論。雖然也曾經提供國內部份人士原始程式,但都是索取後便無下文。國內部份網友行為並不良好,從網站的記錄可看出有少部份網友試圖,自行透過網路拷貝程式原始檔。其實真有需要,來信聯絡彼此好商量。為了更有效推廣電腦輔助教學,也曾經提供部份商業廠商相關建議。很高興成功大學物理系某教授首先響應告知有興趣加入發展行列,也提供了他選定的數個Java動畫原始程式作為參考,但由於他的網頁設有密碼,不知道他最近進行到怎樣的進度,祝他早日完成。有興趣嗎?歡迎您一起來設計Java物理動畫。


作者:國立台灣師範大學物理系 黃福坤副教授
本篇發表於 物理雙月刊(中華民國 物理學會)

since 2011/06/20