Come interpolare linearmente tra due vettori?


16

Ho un vettore di velocità dove si trova il mio client e dove sta andando, e ho lo stesso vettore che viene dal server che dice dove dovrebbe essere il client. A volte è un po 'diverso, quindi voglio interpolare tra la mia posizione corrente e la posizione corretta del server.

inserisci qui la descrizione dell'immagine

La freccia nera è il vettore di velocità del client, la freccia rossa è il vettore di velocità del client sul server e la freccia blu è quella che voglio calcolare e interpolare.

Come calcolo il vettore blu? Quindi, come posso interpolare lineare tra loro?

Risposte:


18

Il vettore blu può essere calcolato facilmente: rosso - nero (il segno tra i vettori è meno). Ma se vuoi solo interpolare tra il vettore nero e rosso, non devi calcolarlo. L'interpolazione lineare è solo una combinazione lineare. Quindi puoi semplicemente prendere: alpha * black + (1 - alpha) * red, dove alpha deve essere compreso nell'intervallo <0,1>. Se l'alfa sarà 1, otterrai un vettore nero, quando l'alfa è 0, otterrai un vettore rosso.

E se ho capito bene, interpolerai tra questi vettori nel tempo. Quindi basta scegliere il giusto incremento di alpha nel tempo.

Ti ho capito bene? O intendevi qualcosa di completamente diverso?


Sì, mi hai capito bene. Ancora un'altra domanda, come posso moltiplicare il numero per il vettore? Quell'operazione mi restituirà un nuovo vettore? Ad esempio, il rosso è un vettore (0, 10) con una lunghezza di 8 e il nero è (-2, 5) con una lunghezza di 4. Come posso fare alfa * nero o (1 - alfa) * rosso? Grazie.
gmemario,

Basta moltiplicare ciascuna coordinata vettoriale separatamente. Se alfa è ad esempio 0,5, quindi alfa * nero + (1 - alfa) * rosso = (0,5) + (-1, 2,5) = (-1, 7,5) - se lo disegnerai su un foglio, vedrà che è esattamente esattamente tra quei due vettori.
Zacharmarz,

10

Scattare questa foto:

inserisci qui la descrizione dell'immagine

AB è il vettore rosso da A a B.

Supponiamo che P sia il 25% della strada da A a B. Il modo base per arrivare a P dall'origine è

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

Quindi 3/4 A e 1/4 B.

Un altro modo per scoprire che sta dicendo che vuoi un vettore "vicino" ad A il 75% e "vicino" al 25% su B. (Un vettore che è "vicino" al 100% è solo il vettore A.)

Quindi potresti anche trovare P come:

A*t + (1-t)*B

Con t = 0,75 (per dire il 75% "vicino" ad A)

0.75A + 0.25B

Quindi una semplice funzione LERP in C per una classe Vector3f sarebbe:

static Vector3f lerp( const Vector3f& A, const Vector3f& B, float t ){
  return A*t + B*(1.f-t) ;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.