拋體運動的理論與計算
這個模型只有一句核心主張:水平方向與垂直方向互不影響。水平沒有力,所以等速;垂直只有重力,所以等加速。 兩者共用同一個時間 t,卻各自獨立地演化。畫面上的每一條曲線、每一個數字,都是這句話的直接後果。
因為兩個方向可以分開解,真空情況下的答案都寫得出封閉形式。軌跡不是一步一步累積出來的,而是把時間代進式子求值得到的。 唯一的例外是空氣阻力,理由寫在最後。
符號
| 符號 | 意義 | 單位 |
|---|---|---|
v_0 | 發射速率 | m/s |
\theta | 發射角,自水平面起算 | 度 |
h | 發射點相對落地面的高度 | m |
g | 重力加速度(地表 9.80665) | m/s² |
v_x,\ v_y | 速度的水平、垂直分量 | m/s |
基本運動方程
v_x = v_0\cos\theta \qquad\text{(不隨時間改變)}
v_y(t) = v_0\sin\theta - gt
x(t) = v_x\,t \qquad\qquad y(t) = h + v_0\sin\theta\,t - \tfrac{1}{2}gt^2
模型的分量圖就是這幾條式子的圖像:x\text{–}t 必然是直線,y\text{–}t 必然是二次曲線,v_x 是水平線,v_y 是斜率恆為 -g 的直線。 若在畫面上看到別的形狀,就表示假設被破壞了(例如加入了空氣阻力)。
飛行時間、射程與最高點
落地即 y = 0,解 \tfrac{1}{2}gt^2 - v_0\sin\theta\,t - h = 0 取正根:
t_f = \frac{v_0\sin\theta + \sqrt{v_0^2\sin^2\theta + 2gh}}{g} \qquad R = v_0\cos\theta\cdot t_f
最高點發生在 v_y = 0 的時刻:
t_{\text{apex}} = \frac{v_0\sin\theta}{g} \qquad y_{\max} = h + \frac{v_0^2\sin^2\theta}{2g}
當 h = 0 時射程化簡為 R = v_0^2\sin 2\theta / g。這個形式讓兩件事一眼可見:R 與 v_0^2 成正比、與 g 成反比(所以月球上同樣的一拋會遠約六倍), 而且 \sin 2\theta 在 \theta = 45^\circ 取最大。
最佳發射角:45° 只是特例
對一般的發射高度,使射程最大的角度為
\sin\theta^{*} = \frac{1}{\sqrt{2 + 2gh/v_0^2}} \qquad R_{\max} = \frac{v_0}{g}\sqrt{v_0^2 + 2gh}
h = 0 時 \sin\theta^{*} = 1/\sqrt{2},也就是 45°。 但只要發射點高於落地面,最佳角就會小於 45°:額外的高度已經免費提供了滯空時間, 因此把速度多分配給水平方向更划算。模型的讀數列永遠顯示由上式算出的角度,不會固定寫 45°。
互補角:等射程的條件
由 R = v_0^2\sin 2\theta / g,因為 \sin 2\theta = \sin(180^\circ - 2\theta), 所以 \theta 與 90^\circ - \theta 射程相同。 兩者的滯空時間卻不同,比值為 \tan\theta:高角度的那一顆晚很多才落地。 模型讓兩顆球同時發射,就是為了讓這個差別看得見。
這個配對只在 h = 0 時成立。發射點一旦抬高,兩個角度的射程就會分開, 模型會分別報出兩個數字,而不是假裝它們相等。
安全拋物線(可及邊界)
固定速率 v_0、掃過所有發射角,得到的軌跡族有一條外包絡線:
y = h + \frac{v_0^2}{2g} - \frac{gx^2}{2v_0^2}
它本身也是一條拋物線。邊界以內的每一點,都存在(通常是兩個)發射角打得到;邊界以外則無論怎麼瞄都打不到。 要打中位於 (x, y) 的目標,發射角滿足
\tan\theta = \frac{v_0^2 \pm \sqrt{v_0^4 - g\left(gx^2 + 2yv_0^2\right)}}{gx}
根號內為負,就代表目標落在安全拋物線之外。兩個解分別對應低伸彈道與高吊彈道。
加速度的切向與法向分量
重力大小方向都不變,但它對運動所起的作用一直在變。 把 \vec{a} = (0,\,-g) 沿速度方向與其垂直方向分解:
a_{\parallel} = -\frac{g\,v_y}{v} \quad\text{(改變速率)} \qquad a_{\perp} = \frac{g\,|v_x|}{v} \quad\text{(改變方向)}
a_{\parallel}^{2} + a_{\perp}^{2} = g^{2}
上升時 a_{\parallel} < 0(減速),下降時 a_{\parallel} > 0(加速), 最高點 a_{\parallel} = 0,此時重力全部用來轉彎。軌跡的曲率與曲率半徑為
\kappa = \frac{a_{\perp}}{v^{2}} = \frac{g\,|v_x|}{v^{3}} \qquad \rho = \frac{1}{\kappa} = \frac{v^{3}}{g\,|v_x|}
因為最高點的速率最小,曲率在該處最大、曲率半徑最小——這正是密切圓在頂點縮到最小的原因。
階梯落點
設階面深 w、階高 r,從最上緣拋出。 第 n 階的踏面位於 y = -nr,水平範圍 [(n-1)w,\ nw]。 落在第 n 階的條件,是軌跡下降到該踏面高度時尚未越過它的外緣:
t_n = \frac{v_y + \sqrt{v_y^2 + 2gnr}}{g} \qquad \text{落在第 } n \text{ 階} \iff v_x t_n \le nw
模型從 n = 1 逐階代入這個不等式,每一階都是一次代數判斷,不是碰撞搜尋。 水平拋出(v_y = 0)時可以直接化簡:
n = \left\lceil \frac{2v_0^2\,r}{g\,w^2} \right\rceil
由於 n 與 v_0^2 成正比,速度加倍會讓落點往下移約四倍的階數。 模型同時顯示這個捷徑與一般解,兩者互相驗算。
空氣阻力:唯一使用數值方法的部分
加入與速率平方成正比的阻力後,運動方程變成
\vec{a} = -g\,\hat{\jmath} - b\,|\vec{v}|\,\vec{v} \qquad b = \frac{\rho\,C_d\,A}{2m}\ \ (\text{m}^{-1})
水平與垂直方程透過 |\vec{v}| 耦合在一起,兩個方向不再獨立,這個系統沒有基本函數形式的解。 因此模型改用四階 Runge–Kutta 法推進,固定步長 \Delta t = 0.002\ \text{s}, 並在最後一步用線性內插求出精確落地點,避免落點被步長量化。
這是模型中唯一被逐步累積出來的曲線,其餘全部是解析求值。程式碼裡這一段被獨立在檔案末端並加上標記, 且有一項測試斷言「標記線以上不得出現任何積分」,讓「以上皆為精確解」成為可驗證的性質,而不是一句會過期的註解。
數值解的誤差如何被檢查
把阻力係數設為 b = 0,數值積分就必須重現真空的封閉解。測試以v_0 = 26\ \text{m/s}、\theta = 38^\circ、h = 8\ \text{m} 檢查: 落地時間誤差小於 10^{-3}\ \text{s},落點誤差小於 10^{-2}\ \text{m}。 這是用它所推廣的那個精確解來校準積分器,而不是拿它自己的輸出跟自己比。
阻力開啟時,模型不會把真空軌跡藏起來,而是兩條並列:這個對照本身就是重點。畫面上以實線與虛線區分, 並標示阻力曲線為數值結果,性質與其餘曲線不同。
模型的理想化與限制
| 模型中的處理 | 真實情況 | 教學影響 |
|---|---|---|
| 重力為定值,方向固定向下 | 重力隨高度與緯度變化,方向指向地心 | 在數十公尺尺度內誤差可忽略;不適用於彈道飛彈或衛星 |
| 不計科氏力 | 地球自轉會使長程彈道側偏 | 短程拋體可忽略;長程偏轉屬於 科氏力效應 模型的主題 |
| 物體視為質點,不自轉 | 旋轉會產生馬格努斯力,使球路彎曲 | 模型不呈現曲球、上旋與側旋 |
阻力採平方律,係數 b 為定值 | C_d 隨雷諾數變化,空氣密度隨高度遞減 | 阻力曲線用於定性比較,不作彈道預測 |
| 兩軸使用同一比例尺 | — | 畫面上的形狀即真實形狀;代價是畫框有時留有空白 |
適合與不適合的用途
適合用來建立「水平垂直獨立」的直觀、比較發射角與射程的關係、討論最佳角與高度的關係、示範互補角與安全拋物線,以及製作教材圖。 若需要真實彈道計算、運動生物力學分析或體育器材設計,應改用含完整空氣動力模型、旋轉效應與實測係數的專業工具。