サーバーとクライアントがあります。私は40個のOpenGLキューブを持っています。状態は、位置の 3 次元ベクトルと 3x3 回転行列 (またはクォータニオン) によって記述されます。
中間パケットを送信し、それらのパケット間のクライアントのオブジェクトの状態を予測するにはどうすればよいですか (外挿)?
オブジェクトの位置については、速度の線形予測子を使用できます。四元数の状態を予測する方法は?
サーバーとクライアントがあります。私は40個のOpenGLキューブを持っています。状態は、位置の 3 次元ベクトルと 3x3 回転行列 (またはクォータニオン) によって記述されます。
中間パケットを送信し、それらのパケット間のクライアントのオブジェクトの状態を予測するにはどうすればよいですか (外挿)?
オブジェクトの位置については、速度の線形予測子を使用できます。四元数の状態を予測する方法は?
線形速度で行っていることと並行して最も簡単なことは、角速度で線形予測子を使用することです。
t秒離れたグローバル方向を表す2 つの四元数q_0とq_tがある場合、2 つの四元数間の有限差を計算し、それを使用して外挿に使用できる角速度を見つけることができます。
mが十分に大きい場合は、角速度を求めるだけです。
v = 2asin(m)[dq.x、dq.y、dq.z]/(m*t)
ただし、mが十分に大きくない場合、ほぼゼロで割ろうとする数値の問題に直面します。そのため、プログラマーはゼロ付近で sinc() 関数のテイラー展開を使用しますが、この場合はたまたま非常に正確です。m = sin(Θ/2)であることを思い出してください。m<1e-4の場合、 asin(m)/m = 6/(6-m*m)を正確に計算できます。次に、結果に2*[dq.x,dq.y,dq.z]/tを掛けるだけで、角速度が得られます。 ふぅ。
外挿は、角速度に経過時間を掛けることの問題です。次に、逆方向に進み、角度の変化を四元数に変換し、それをq_tに乗算します。
もっと簡単な方法が必要なようです...