ある位置に向かって操縦するのはそれほど難しくありませんが、私はしばらくの間、その位置に向かって操縦し、特定の速度で到達するか、速度に制約のある道を辿るという問題に苦労しました。
私はエルミート曲線を使用して問題を解決しました。p0とm0を船の位置と速度に設定し、p1とm1を目標の位置と速度に設定します。これは、船が目標の1秒後に追従することを前提としています。p(0)の2次導関数を計算します。これにより、船に適用する加速度が得られます。
2次導関数のコードは次のとおりです(F#では、選択した言語に適応できることを望みます。sq()は、引用符としてではなく文字として解釈される正方形の単一引用符を計算し、識別子の一部です)。
let h'' t =
let h00'' t = 12.0 * t - 6.0
let h10'' t = 6.0 * t - 4.0
let h01'' t = -12.0 * t + 6.0
let h11'' t = 6.0 * t - 2.0
let t = (t - t0) / diff_t
(sq (1.0 / diff_t)) *
((h00'' t * p0) +
(h10'' t * diff_t * v0) +
(h01'' t * p1) +
(h11'' t * diff_t * v1))
船が外力(惑星からの重力など)の影響を受ける場合、加速度から推力を計算する際にそれを考慮する必要があることに注意してください。