2つのベクトル間を線形補間するにはどうすればよいですか?


16

私は、クライアントがどこにいて、どこに行くのかという速度ベクトルを持っています。そして、クライアントがどこにいるかを伝えるサーバーから来る同じベクトルを持っています。時々少し違うので、現在の位置とサーバーの正しい位置の間を補間したいと思います。

ここに画像の説明を入力してください

黒い矢印はクライアント速度ベクトル、赤い矢印はサーバー上のクライアント速度ベクトル、青い矢印は計算して補間したいものです。

青いベクトルを計算するにはどうすればよいですか?次に、どうすればそれらの間を線形補間できますか?

回答:


18

青のベクトルは簡単に計算できます:赤-黒(ベクトル間の符号はマイナスです)。ただし、黒ベクトルと赤ベクトルの間だけを補間する場合は、計算する必要はありません。線形補間は単なる線形結合です。アルファ*黒+(1-アルファ)*赤、ここでアルファは区間<0,1>からでなければなりません。アルファが1の場合、黒いベクトルが得られ、アルファが0の場合、赤いベクトルが得られます。

そして、私がそれを正しく理解していれば、これらのベクトルを時間内に補間します。したがって、時間内にアルファの正しい増分を選択するだけです。

私はあなたを正しく理解しましたか?または、完全に異なるものを意味しましたか?


はい、あなたは私を正しました。もう1つ質問があります。ベクトルの数値をどのように乗算しますか。その操作は新しいベクターを返しますか?たとえば、赤は長さ8のベクトル(0、10)であり、黒は長さ4の(-2、5)です。アルファ*黒または(1-アルファ)*赤はどうすればよいですか?ありがとうございました。
gmemario

各ベクトル座標を別々に乗算するだけです。たとえば、アルファが0.5の場合、アルファ*黒+(1-アルファ)*赤=(0,5)+(-1、2.5)=(-1、7.5)-これを紙に描く場合は、これら2つのベクトルの間にあることが正確にわかります。
-zacharmarz

9

この写真を撮る:

ここに画像の説明を入力してください

ABは、AからBへの赤いベクトルです。

PがAからBへの道の25%であるとしましょう。原点からPに到達する基本的な方法は

A + ( B - A ) / 4
= 3/4 A   +   B / 4

3/4 Aと1/4 B

それを見つける別の方法は、Aに75%「近い」、Bに25%「近い」ベクトルが必要だということです(Aに100%「近い」ベクトルは、Aベクトルだけです)。

したがって、Pを次のように見つけることもできます。

A*t + (1-t)*B

t = 0.75(75%がAに「近い」)

0.75A + 0.25B

したがって、Vector3fクラスのCでの単純なLERP関数は次のようになります。

static Vector3f lerp( const Vector3f& A, const Vector3f& B, float t ){
  return A*t + B*(1.f-t) ;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.