<!-- --> <style> body { overflow: hidden; } body > .ui-infobar, body > .ui-toc, body > .ui-affix-toc { display: none !important; } .container { padding-left: 0px; margin-right: auto; margin-left: 0px; } .markdown-body { padding-left: 80px; padding-top: 20px; padding-bottom: 80px; font-family: Microsoft JhengHei,Helvetica,Arial; } h1{color: #0090E0; font-weight: bold;} h2{color: #0090E0; font-weight: bold;} </style> # 多球體拋物運動實驗 這個實驗延續"拋物運動實驗"。 大家可以從Animation畫面上看到有十顆球,從左邊向右拋出。我們可以調整"Speed"旋鈕改變拋出的速度,也可以調整"Angle"旋鈕改變拋出角度。 不論是改變速度與角度,都會影響球掉落的位置。 ## 自然小知識 * ### 角度(angle)與弧度(radian) 二相交直線或平面間之空間稱為角,而角度與弳度都是角的單位。角度是將一圓周分為360等分,單位符號為"°"。弧度又稱弳度,單位符號為rad。弧度與圓周率π有關,一個完整的圓的弧度是2π。單位弧度定義為圓弧長度等於半徑時的圓心角。角度與弧度可互相轉換,轉換公式如下: > 1 弧度 = π / 180 * 角度 > 1 角度 = 180 / π * 弧度 > * ### 三角函數(trigonometric functions) 一個直角三角形如下圖所示: ![](https://i.imgur.com/ZZpDZx1.png) 直角三角形的內角*θ* 和三個邊A、B與H的關系可以用三角函數: > sin*θ* = A / H > cos*θ* = B / H > tan*θ* = A / B > cot*θ* = B / A > sec*θ* = H / B > csc*θ* = H / A > 三角函數在日常生活的應用十分廣泛,不論是在導航、測量、建築工程以及產品設計上,都會運用三角函數。 ## 寫程式小知識 + ### 函式(function) 在程式設計中,我們可以呼叫(call)函式來幫我們完成一些特定的工作。如此我們就不用費功夫去寫那項工作的程式了,只要呼叫一下,給幾個必要的參數即可。比如,三角函式,我們只要打入要執行的三角函式之名稱,然後在小括號內填上弧度值即可得到結果。像這樣: ```python3 x = Math.sin(3.14159) # x 即為sin(π) y = Math.cos(3.14159 / 4.0) # y 即為cos(π / 4) ``` 有些函式可以幫我們建立一個物件,像vec就可以幫我們建立一個三維的向量,只要呼叫vec並在小括號內依序填入x、y與z三個數值: ```python3 p = vec(1.0, 2.0, 3.0) # p 即為一個三維向量 ``` 有些函式可以幫某個物件計算特定的功能,像norm可以計算一個三維向量的長度,也就是x、y與z的平方和後再取平方根: ```python3 len = norm(p) # len 即為p的長度 ``` 我們可以把某個函式產生的結果,直接做為另一個函式的參數。如下面所式,將vec的結果直接給norm計算長度: ```python3 len = norm(vec(1.0, 2.0, 3.0)) # len 即為(1.0, 2.0, 3.0)的長度 ``` + ### 函式設計 我們可以設計一個屬於自己的函式!方法很簡單,格式如下: ```python3 def 函式名稱(參數名稱1, 參數名稱2, ...): 函式內容 ``` 其中,函式名稱與參數名稱都是可以自由地取名,但要符合變數名稱的取名規則(英文字母、數字與底線_的組合,第一個字不可是數字)。請注意,小括號後面有一個冒號,函式內容要縮排。 請點一下網頁上方的**Program**,然後看程式第14行: ```python3=14 def rad(x): return Math.acos(-1)*x/180.0 ``` 這就是一個函式設計的範例,這個函式可用來將角度x轉成弧度。 請注意return 這個命令,它的意思是"**回傳**"。若函式會輸出一個結果,我們必須以return命令將計算結果輸出。否則,此函式將不會輸出任何東西。 ## 寫程式能把理論化為現實 + 點一下網頁上方的**Program**,就可以看到程式了。 + 請看第25行: ```python3=25 ball.velocity = speed * norm(vec(Math.cos(rad(angle)), Math.sin(rad(angle)), 0)) ``` 以及第37行: ```python3=37 velocity = speed * norm(vec(Math.cos(rad(angle)), Math.sin(rad(angle)), 0)), ``` 有沒有發現ball.velocity與velocity都等於一個同樣的運算式,大家可以把這個運算式包裝成一個名為getVelocity的函式嗎?讓getVelocity只要輸入一個角度值即可輸出一個運動向量。