あなたの質問はいくつかの点で不明確なので、いくつかの仮定を立てる必要があります:
- 各時間間隔中、並進速度と回転速度は一定です。
- すべての時間間隔でこれらの変数の値を知っています (そして、「非常に左」だけでなく、ラジアン/秒などの使用可能な単位で回転速度を知っています)。
- あなたは最初の見出しを知っています。
- 丸め誤差が問題にならない十分な精度を維持できます。
それを考えると、正確な解決策があります。最初の簡単な部分:
delta_angle = omega * delta_t
ここで、ω は角速度です。移動した距離 (おそらくカーブに沿って) は
dist = speed * delta_t
曲線の半径は
radius = dist / delta_angle
(角速度がゼロに近い場合、これは非常に大きくなります。これについてはすぐに説明します。) angle (間隔の開始時) がゼロで、+x 方向を指していると定義されている場合、間隔は簡単です。これを deta_x_0 および delta_y_0 と呼びます。
delta_x_0 = radius * sin(delta_angle)
delta_y_0 = radius * (1 - cos(delta_angle))
非常に小さい delta_angle と非常に大きな半径を処理できるようにしたいので、sin と cos を展開し、角速度がゼロに近い場合にのみこれを使用します。
dx0 = r * sin(da) = (dist/da) * [ da - da^3/3! + da^5/5! - ...]
= dist * [ 1 - da^2/3! + da^4/5! - ...]
dy0 = r * (1-cos(da)) = (dist/da) * [ da^2/2! - da^4/4! + da^6/6! - ...]
= dist * [ da/2! - da^3/4! + da^5/6! - ...]
しかし、角度は通常ゼロに等しくないため、これらの変位を回転させる必要があります。
dx = cos(angle) * dx0 - sin(angle) * dy0
dy = sin(angle) * dx0 - cos(angle) * dy0