科學素養新式評量EJS (教師: 黃 福坤)
登入
主題大綱

點選課程每個區段左邊可以寫下個人針對該區段的筆記,點選課程資源連結時,網頁上方連結後也有相同圖案,可以註記針對該資源的筆記.若點選本網頁上方圖案則可記錄針對本課程的筆記. 歡迎多加利用!
(0)
課程公告區

Google 輸入 EJS download 就可找到最新版本下載連結

動畫模擬設計三部曲:

  1. 真:首先要求模擬內容必須正確無誤
  2. 善:然後追求使用者使用的方便性
  3. 美: 最後改善模擬的美觀

物理科自由軟體推廣研習
 
此次工作坊的目的在於讓 參與者瞭解
  1. 如何運用現有EJS模擬程式於教學/如何修改以符合個人教學需求
  2. 如何利用EJS 設計教學動畫: EJS 本身的設計與科學解題的關連
  3. 如何利用EJS 作為教學工具Modeling Tool
以上目標為主,並且讓參與者有實際操作的經驗.
工作坊結束後歡迎各位繼續利用本園地 討論相關問題!


設計物理模擬動畫的步驟
  • 先提出模擬構想
  • 分析模擬的相關物理:定義相關變數, 找出變數間關係式或變數隨時間或空間的微分關係(先了解問題的時空尺度scale)
  • 透過ejs 定義變數,輸入關係式 ,由 EJS產生程式碼
  • 觀察產生的模擬 修正可能的錯誤 或修改介面設計
Theo Jansen′s mechanism

歡迎到以下連結參考相關物理模擬
運動學   動力學   振動和波動   熱力學   光學    電子學   近代物理   電磁學   數學
只要是 物理問題討論區 的註冊者,登入後閱覽模擬時均可看到下載按鈕
包含數百個物理模擬 均可下載, 利用EJS製作的 都可看到原始製作資料並可修改.
也歡迎參考
Physlet 物理動畫庫(包含超過800個物理動畫)
或個人的動畫
英文網站 NTNUJAVA


(1)
Easy Java Simulation

安裝Easy Java Simulation 的步驟:

  1. 下載最新版 EJS 程式 (下載後解壓縮到C:\或D:\)
  2. 下載後解壓縮到任何一個目錄下 例如 c:\ (則會產生c:\Ejs 的目錄) 說明影片
  3. 進入 Ejs 目錄 點選 EjsConsole.jar 便可執行 Easy Java Simulation (初次安裝時會要求輸入個人姓名等基本資料 以便輸入產生的動畫檔中)
若是你點選 EjsConsole.jar 發現啟動的是 解壓縮程式 圖案也變成解壓縮程式的圖案
表示你的電腦沒有支援Java Run Time 或者因為後來安裝解壓縮程式將 .jar 檔案變成自動啟動壓縮程式
點選連結 瀏覽器是否支援java測試  若無法看到java程式請依照說明下載最新版java run time 或
點選 最新版 Java Run time 的連結 下載後安裝 Jave Run Time 應該就可以了!

或者觀看 點選EjsConsole.jar 卻啟動解壓縮程式的解決方法(影片)

(本課程中影片主要是根據2006年版本拍攝,下載版本和教學影片內容稍有差異 )

舊版的範例簡易模擬動畫設計製作環境 Easy Java Simulation 使用說影片(檔案較大,有聲音)



(2)
注意事項與相關資料

使用 EJS 常見錯誤

  1. 使用變數前忘記先定義變數
  2. 儲存檔名以英文字母開始,檔名用英文字母與數字(不可用數字起頭)
    檔名請不要添加 中文或特殊符號(含空白)
    檔名請勿使用for,if, switch, true,false.int,double,final,... + - * / % | & () [] {} 等程式的關鍵字
  3. 整數與整數相乘除 結果是整數  1/2  結果是 0 , 1./2 或 1/2. 或 1./2. 結果才是 0.5

參數演化關係中 除了等加速度以外 其餘的情況請選用 Runge-kutta 五階誤差的數值方法

請不要用預設的 Midpoint 三階誤差的方法

Java 程式基本邏輯指令

if(邏輯運算指令; 例如 if(x>5 || x<3)y=2; 也可寫成 if((x-5)*(y-3)<0)y=2;

if(邏輯運算指令;
else if(邏輯運算指令;
else 指令;

for(重複執行前指令  繼續執行邏輯判斷  執行後指令重複執行指令

其中指令不止一行時可以用 大括弧包住,替代一個指令的位置!

if(x>3) y=1;
else y=2;

if(x>3)y=1;
else if(x<1)y=0;
else y=1.5;

if(x>3){

 y=1;
 z=2;
}else {
 y=2;
 z=3;
}

建議 一旦使用括弧 先寫好完整括弧對 之後在內部添加內容,如
if(x>3){

}else{

}

先寫好以上結構,之後在括弧內寫指令
這樣比較不會忘記添加結尾的括弧
尤其需要好幾層的時候 又如
for(int i=0;i<n;i++){
 for(int j=i+1;j<n;j++){
 
 }
}

假設 x=5; y=3; 要將兩數值對調 不可以僅寫

x=y; // 此時已經將y的值放入 x 內,也就是 x,y 的值都是 3
y=x; // 此指令是要將 x的值(3)放入 y內 , 其實 根本沒有新的作用

應該要先定義另一個變數暫時儲存其中一個值 例如定義 z
z=x;// 將 x 的值 放入 z, 此時 z 記憶體的值是5
x=y; // 將 y的值放入 x, 此時x 的值變成 3
y=z; // 將z的值放入 y, 因此y 變成 5
以上步驟就達到 x,y 互換的目的.




(3)





(4)
相關範例

以EJS 事件處理一微碰撞的範例 Elastic Collision (1D) 網頁中第二個範例適合初學者 下載 啟動後 按右鍵 選取 open EJS model 便可啟動EJS 觀看模擬的製作方式!
Simulate 1D collision with a virtual spring 則是一個以彈簧模擬碰撞過程的另一種呈現方式


以下的影片上方都有控制鈕 可以操控影片暫停或播放等動作
早期的ejs原始檔是 .xml格式,目前最新版 ejs原始碼改為 .ejs (可支援不同國家語言文字的格式)

自訂函數的格式說明:以行星運動為例

public  double calF(double dx,double dy){// public 表示此函數在ejs內各處都可以使用
double r2,r3;
r2=dx*dx+dy*dy;
r3=r2*Math.sqrt(r2);
return G*m1*m2/r3;
}

定義以上函數以後 便可以於需要時使用
例如 fx=calF(2.5, 3.2); 變會將 2.5帶入函數中的dx,3.2帶入函數中的dy 然後將計算結果放入 fx的變數內

函數中也可以加上條件而傳回不同值

例如

public double calF(double x){
if(x<0)return 0.;
return 5.;
}

則以上函數執行時 若參數x<0傳回 0 , x>=0 則傳回5
表示當x<0時物體不受力 但是x>0時受到固定的力作用




(5)
關於JAVA高階參考資料




(6)
好用的工具

使用程式有問題時可以藉由安裝以下程式擷取電腦畫面的螢幕 說明問題情況
點選後安裝 並啟動後即可使用
你可以擷取整個電腦桌面 或者某個特定視窗 或者自行定義要擷取的畫面區域
程式預設按下  PrtScr 鍵時會開始擷取畫面
若是選擇自行定義擷取區域 則需利用滑鼠先選擇區域的左上角 然後選擇區域的右下角
選完便開始擷取畫面
本程式的好處是擷取完畫面後 包含一些簡易工具 讓你可以加工說明
例如加上箭頭 輸入文字等功能 請自行試試看 應該是一個蠻好用的小工具!




(7)
進階參考資料

 



(8)
過去專題製作需要說明事項

  1. 三維的顯示與物件使用 含三維物件的旋轉:使用三維畫圖區DrawingPanel3D 類似二維設定x,y,z座標與對應屬性
  2. 物件的顯示與消失:每一個物件都有顯示的屬性 該屬性內對應變數為true 則顯示 例如定義變數 show(資料格式為 boolean)預設值為 false,將粒子顯示屬性設為 show 則粒子不顯示,若添加勾選方塊 讓其對應變數為 show 則當勾選時  show值變成 true 於是粒子顯示,不勾選時則不顯示
  3. 作用力隨時間或空間變化的處理: 定義函數計算作用力 於函數內利用 if 指定判斷不同狀況下該傳回的數值
  4. 物件顏色的處理:定義變數 以便程式中變化其數值 例如 定義clr,red,blue等 變數 資料格式選擇 Object, 將red 預設值定為 new java.awt.Color(255,0,0) blue預設值定為 new java.awt.Color(0,0,255) 若將粒子顏色屬性定為clr , 而clr=red 則顯示紅色 clr=blue則顯示藍色. 止於何時定就要看你自己如何設計!
  5. 初始化的處理:初始化頁 通常僅程式開始執行 定義完變數後執行一次.若需要重複執行可輸入 _initialize();
  6. 控制桿數值特定區間的設定: 例如添加拉桿對應變數n,範圍最小0,最大15,  控制拉桿有標線數 若將其定為6, 並將下方最接近值選為true,則拉桿放開後數值僅出現於0,3,6,9,12,15 等六個位置  
  7. 添加斜面:有一個Plane的元件 指定一個端點的座標x,y,z然後指定通過該點斜面兩邊邊長與兩邊的向量座標(方向A/B屬性)
  8. 如何使用外積?複數? 例如 F=q*(E+VXB) 分別定義fx,fy,fz 依據定義寫下類似 fx=q*Ex+q*(vy*Bz-vz*By)即可 複數也是定義兩個變數如xr,xi 分別帶表實數與虛數值
  9. 如何用按鍵來控制?定義一個變數儲存按鍵數值(是0-255數字)例如變數定義為key資料格式選擇整數 DrawingPanel 內按鍵代碼 設為key, 則按下鍵盤某鍵時其對應電腦碼 會儲存於key變數內 例如按下a key值會變成65,b則變成66等.若需要執行指令則填寫於 按鍵指令的屬性內
  10. 讓兩個物件合而為一?油滴結合 這要自己想好油滴形狀的數學關係式 利用多邊形去描繪!
  11. 滑鼠的操控:DraeingPanel內有滑鼠x,y座標的屬性 定義變數如mx,my然後將其座標屬性分別設成mx,my 則滑鼠座標會儲存於該兩個變數內
  12. 顯示文字!有文字的元件設定要顯示的文字與座標即可
  13. 圖片的使用:有圖片的元件 圖片可以是gif或jpg,但是需要放在Simulation目錄下(子目錄也可以) 選擇圖片檔名 並設定圖片座標寬高等屬性即可
  14. 背景動物體不動 (帆船的範例)讓背景的點或線反方向移動
  15. 1/p+1/q=1/f:例如已知 p,f 則轉換成 q= pf/(p-f);
  16. 不知道如何表達動量守衡的傳遞語法;能量守衡的考慮
    其實重點是只要程式作用力分析是正確的自然就會滿足能量守恆與動量守恆的關係 而不是反過來的方式!
  17. 如何求兩球碰撞連心線分量或反射線?
  18. 背景移動(xmin+dx,xmax+dx,ymin+dy,ymax+dy)




(9)

可以透過javaScript 去控制或取得 EJS動畫中的參變數資料

整體變數與區域變數
函數的定義

public void action(){
 if(x<0)x=0;
}
public double calF(double x1,double x2){
  if( Math.abs(x1-x2)<size)return -k*(Math.abs(x1-x2)-size);
 return 0.;
}




(10)





尚未登入. (登入)

since 2011/06/20 18:23