# 2. ライオンの移動 (速度制限を考慮して半径 OM 上を追う)
# L_n から L_{n+1} への距離が l_n となるような新しい半径 r_L' を求める
dist_l = np.linalg.norm(l_pos)
cos_dt = np.dot(om_unit, new_om_unit) # 角度の変化の余弦
sin2_dt = 1 - cos_dt**2

# 余弦定理の逆解: rL'^2 - (2*rL*cos_dt)*rL' + (rL^2 - l_n^2) = 0
term = l_n**2 - (dist_l**2 * sin2_dt)
if term < 0: # 角度に追いつけない場合(基本起きない)
new_dist_l = dist_l * cos_dt
else:
new_dist_l = dist_l * cos_dt + np.sqrt(term)

# 捕獲判定(数値誤差考慮)
if new_dist_l >= new_m_dist:
new_dist_l = new_m_dist

l_pos = new_dist_l * new_om_unit

m_path.append(m_pos.copy())
l_path.append(l_pos.copy())
distances.append(new_m_dist - new_dist_l)

if new_m_dist > R: break # 壁に到達

return np.array(m_path), np.array(l_path), distances