ロケットが大気中を飛行する際には、空気から力を受けます。ここでは空気力学の基礎を学びます。
物体が流体中を移動するとき、進行方向と反対向きに力を受けます。これを**抗力(Drag)**と呼びます。
-
$F_D$ : 抗力 [N] -
$\rho$ : 空気密度 [kg/m³](海面付近で約1.225 kg/m³) -
$v$ : 速度 [m/s] -
$C_D$ : 抗力係数 [-](形状による無次元数) -
$A$ : 代表面積 [m²](通常は断面積)
- 速度の2乗に比例: 速度が2倍になると抗力は4倍
- 進行方向と逆向き: 常に運動を妨げる方向
- 形状依存: 流線型は抗力が小さい
| 形状 | |
|---|---|
| 球 | 0.47 |
| 円柱(垂直) | 1.2 |
| 流線型 | 0.04-0.2 |
| ロケット | 0.3-0.8 |
物体の形状や姿勢によって、進行方向に垂直な力が発生します。これを**揚力(Lift)**と呼びます。
-
$F_L$ : 揚力 [N] -
$C_L$ : 揚力係数 [-]
- 軸対称のロケットが軸方向に飛行する場合、揚力はほぼゼロ
- 迎角(進行方向と機軸のずれ)があると揚力が発生
- 今回の教材では主に抗力のみを考慮
空気力の式に共通して現れる
動圧は「単位面積あたりの運動エネルギー」に相当します。
3次元では、抗力は速度ベクトルの反対方向を向きます:
ここで
import numpy as np
def calc_drag(velocity, rho=1.225, Cd=0.5, A=0.01):
"""
抗力ベクトルを計算
Parameters
----------
velocity : np.ndarray
速度ベクトル [m/s]
rho : float
空気密度 [kg/m³]
Cd : float
抗力係数
A : float
代表面積 [m²]
Returns
-------
np.ndarray
抗力ベクトル [N]
"""
v_mag = np.linalg.norm(velocity)
if v_mag < 1e-10:
return np.zeros_like(velocity)
v_unit = velocity / v_mag
drag_mag = 0.5 * rho * v_mag**2 * Cd * A
return -drag_mag * v_unit1次元(鉛直方向のみ)の場合、速度の符号を考慮:
def calc_drag_1d(v, rho=1.225, Cd=0.5, A=0.01):
"""1次元の抗力"""
drag_mag = 0.5 * rho * v**2 * Cd * A
return -np.sign(v) * drag_mag- 上昇時($v > 0$): 抗力は負(下向き)
- 下降時($v < 0$): 抗力は正(上向き)
落下中、重力と抗力が釣り合うと一定速度になります。これを終端速度と呼びます。
終端速度: $$ v_t = \sqrt{\frac{2mg}{\rho C_D A}} $$
scripts/02_physics/02_aerodynamics_example.py を実行してください:
python scripts/02_physics/02_aerodynamics_example.py次章: 座標系と座標変換