EJS 物理教學動畫設計工作坊
登入

Ejs 內定資料格式:


語法
格式
範例
int
整數
int i=0; 指定變數 i 為整數 且設定為 0
double
實數
double z=1.0 指定變數 z 為實數 且設定為 1.0
boolean
真假值
boolean view=true;可能值為 真或假 true or false 
String
字串
String title="標題" 指定變數 title為內容為 "標題" 的字串
Objec
物件
Color clr=new java.awt.Color(0,0,255,128); 指定 clr 為顏色變數, 其值為藍色 

數學運算範例:

範例說明簡易寫法
x=x+1;代表取出 x 的現有數值 加 1 後 成為新的 x 數值x += 1; 或 x++; 
x=x-1;代表取出 x 的現有數值 減 1 後 成為新的 x 數值x -= 1; 或 x--;
x=x*5;代表取出 x 的現有數值 乘 5 後 成為新的 x 數值x *= 5;
x=x/5;代表取出 x 的現有數值 除 5 後 成為新的 x 數值x /= 5;
x=x%5;代表取出 x 的現有數值 除 5 後的餘數 成為新的 x 數值x %= 5;

邏輯關係式範例:

x > y
若 x 大於 y 傳回 true, 否則傳回 false 
x >= y
若 x 大於 y 或等於y 傳回 true, 否則傳回 false
x ==y 
若 x 等於 y 傳回 true, 否則傳回 false (注意有兩個等號 以便和數學運算區分)
x <= y
若 x 小於 y 或等於 y 傳回 true, 否則傳回 false
x < y
若 x 小於 y 傳回 true, 否則傳回 false

邏輯運算範例:

a && b
同時滿足 a 和 b 傳回 true, 否則傳回 false
a || b
滿足 a 或 b 傳回 true, 否則傳回 false
!a 
若 a 為 true 則傳回 false, 若 a 為 false 則傳回 true

不同格式間運算後的格式: 


int i=2; double x=3; x=i*x; 整數和實數運算後 傳回實數 因此 本運算沒問題
i= i*x; 是錯誤的運算式, 因為運算結果為整數 若改為 i=(int) (i*x); 則可以

常用的 java 數學函數



函數名稱
傳回數值格式說明
Math.abs(x)
double
x 的絕對值 
Math.sqrt(x)
double
x 的根號
Math.sin(x)
Math.cos(x)
Math.tan(x)
double
x 的三角函數
Math.asin(x)
Math.acos(x)
Math.atan(x)
Math.atan2(y,x
double
三角反函數
cta=Math.atan(x) 代表 Math.tan(cta)=x;
cta=Math.atan2(y,x) 代表 Math.tan(cta)=y/x; 本函數會處理x=0的問題
Math.ceil(x)
Math.floor(x)
Math.rint(x) 
double
大於或等於 x 的最小整數
小於或等於 x 的最大整數
最接近x的整數
Math.exp(x)
double
傳回 指數 e 的 x 次方 即 ex
Math.log(x) 
double
x的指數(e為底)
Math.min(a,b)
Math.max(a,b) 
int 
傳回 a,b整數 的極小或極大整數值
Math.pow(x,y)
double
傳回 x 的 y 次方, xy

依條件 控制執行的語法 :

if (條件關係)甲指令;
else 乙指令;
若關係式為真執行 甲指令; 否則執行 乙指令. 例如:
if(x>5) y=y+3; 
else y=y-5;
if(x>5){ 
   x+=3;
   y+=5;
} else {
   x-=3;
   y-=5;
}
例如 if(x>5 || x<3)y=2; 也可寫成 if((x-5)*(y-3)<0)y=2;
switch(表示式){ 
 case 甲數值:甲指令; break;
      case 乙數值:乙指令; break;
        ...

        default: 其他指令; break;
}
若表示式和甲數值相等則處理甲指令,
和乙數值相等則處理乙指令...
若是皆不符合則處理 default 後的其他指令.
以上指令皆可以是以 { } 內的多個指令 
(記得:每個指令皆以分號 ; 結尾) 
while(關係式){ 
  指令;
}
當關係式為true時,持續執行 {} 內指令, 每執行一次檢查一次關係式
若一開始關係式為 false, 則不執行
do{ 
     指令;
} while (關係式);
先執行指令後 檢查關係式 若為true 則重複執行,直到關係式為false;
因此 指令 至少執行一次
for(甲指令;條件式;丙指令){ 
 乙指令;
}
先執行甲指令,
然後執行 {} 內乙指令
每完成 乙指令, 接著執行丙指令
然後若條件式為true 
則繼續執行乙/丙指令,否則結束
for(int i=0;i<n;i++){ 
   x=x+i;
}
for(int i=0,j=j+100;i<max;i++,j+=2){ 
 f[i][j]=100*i*j;
}

以下 範例是讓一個粒子 在隨機出現在 [-range/2, range/2] 之間

    x=range*(Math.random()-0.5); 
    y=range*(Math.random()-0.5);
當我們練習想將一個粒子變成 轉變成100個粒子,首先需要將x,y 轉變為代表 100個粒子座標的向量
因此首先定義 n=100; 並選擇其在定義參變數區域的x,y 的維度格式欄位加上[n] 表示用來代表 n個粒子. 如此一來

x[0] 代表第 1 個粒子的 x 座標, x[1] 代表第 2 個粒子的 x 座標, ... ,x[n-1] 代表第 n 個粒子的 x 座標 
 為了讓這100個粒子都設定為出現在隨意的位置 並不需要將上面設定的公式重複100次, 而是利用以下語法 重複執行大括弧 { } 內部的指令

for (int i=0;i<n;i=i+1){ 
        x[i]= range*(Math.random()-0.5);
        y[i]= range*(Math.random()-0.5); 
}

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

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時受到固定的力作用

 
補充說明:

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 互換的目的.

 

0最後修改紀錄: 2007/12/17(Mon) 13:28:06


尚未登入. (登入)

since 2011/06/20 18:23