Quando dovrei estrapolare e quando dovrei interpolare?


16

Ho difficoltà a capire quando estrapolare e quando interpolare. In gaffer sui giochi, ha detto di interpolare ma poi in un altro articolo ha raccomandato di estrapolare il giocatore. Quindi la mia domanda è quando è meglio estrapolare e quando è meglio interpolare?


22
Esistono due tipi di persone. Coloro che possono estrapolare da dati incompleti
Almo

2
@Almo e qual è l'altro tipo? Per favore dimmi, devo sapere!
DJMcMayhem,

4
@DJMcMayhem ... e quelli a cui piace mangiare i bastoncini di pesce.
user253751

4
Non capisco la domanda. Puoi spiegare un modo per "interpolare" i punti {(1, a), (2, b)} per prevedere c in (3, c)? E come lo estrapoleresti?
user541686

Risposte:


29

Interpoli quando conosci i valori 'prima' e 'dopo'.

Ad esempio: in una partita punta e clicca, il giocatore è attualmente nella posizione X e dalla sua interfaccia, fa clic sul punto Y. Devi interpolare lo spostamento tra X e Y perché conosci i due valori.

Estrapoli quando indovini quale sarà il valore futuro, in base a ciò che già conosci.

Ad esempio: in un gioco sparatutto in prima persona, il giocatore è in posizione X e ha premuto la freccia SU sulla sua tastiera per l'ultimo secondo, puoi supporre che lo farà di nuovo per il secondo successivo perché è sostanzialmente il comportamento più frequente nel tuo gioco; così estrapoli la posizione che sarà il prossimo fotogramma. Il server lo invia agli altri client di gioco, questo spiega il ritardo nella trasmissione dal server ai giocatori.

L'estrapolazione viene utilizzata principalmente per la previsione del movimento. Non è necessario dal server di gioco , ma i client di gioco ne hanno bisogno per mostrare una visione un po 'realistica e attuale dello stato del gioco al fine di offrire ai giocatori un'esperienza visiva fluida.


Capisco quella parte, ma quello che non capisco è quando dovrei usare ognuno. Come ad esempio, se interpolo un giocatore, ci sarà un ritardo per vedere effettivamente il movimento, ma se estrapolo sarà più istantaneo ma potrebbe non essere preciso e dovrà essere corretto. Di solito è più desiderabile avere il movimento istantaneo dall'estrapolazione o il movimento più coerente dall'interpolazione?
J leong,

@Jleong Vuoi che il gioco sia presentato nel modo più fluido possibile agli utenti. Interpoli lo stato corrente del gioco e estrapoli come sarà in un paio di frame. Si inviano i valori estrapolati agli altri giocatori per tenere conto del ritardo nella trasmissione della rete. Se dovessi inviare i valori interpolati, il gioco sembrerebbe ritardare e non sarebbe divertente. (Ho modificato la mia risposta. Spero che lo chiarisca un po 'di più.)
Vaillancourt

oh ok così l'estrapolazione viene usata quando vuoi che il cliente preveda cosa accadrà? In tal caso, qual è il punto di interpolazione se puoi sempre estrapolare per mantenere il gioco vicino al tempo reale? quindi per un FPS, il giocatore sarebbe estrapolato e gli altri giocatori sarebbero interpolati?
J leong

In generale, il server fa tutto: interpola su ciò che sa e, in base a ciò, estrapola i valori e li invia ai client in modo che arrivino in tempo per essere presentati ai giocatori. In un FPS, l'interpolazione viene utilizzata per visualizzare elementi come proiettili, AI e simili. Quando si esegue il frame B (proveniente dal frame A) interpoleranno i valori per lo stato del frame B; può anche iniziare a prevedere il Frame C per interpolazione dei valori noti , ma dovrà estrapolare i valori che non conosce (input del giocatore). Quindi invierà lo stato "futuro" al client.
Vaillancourt

@Jleong Senza pensare alla differenza tra client e server, posso usare l' interpolazione per ricavare una posizione da qualche parte tra due punti noti (per cose come il controllo di una collisione che potrebbe essersi verificata tra i frame), o inoltre, prendere quel set di dati e derivare cose come velocità / traiettoria e accelerazione, dato un insieme di punti e data l'ultima velocità / accelerazione / traiettoria conosciute, posso estrapolare dove questi oggetti potrebbero essere, in futuro, assumendo un arco temporale coerente. Per la comunicazione server-client, viene utilizzata la posizione estrapolata "ottimista".
Norguard,

14

L'interpolazione viene eseguita quando si hanno sia un valore iniziale che finale e si desidera stimare cosa succede tra questo valore iniziale e finale. Un esempio potrebbe essere quello di spostare un giocatore dalla posizione A alla posizione B con un movimento fluido.

L'estrapolazione viene eseguita quando si dispone di un valore iniziale, ma non si dispone ancora di dati per la fine. Puoi quindi estrapolare in base ai dati che hai. Ad esempio, in base ai movimenti precedenti di un giocatore, puoi determinare dove si troverà probabilmente nel prossimo frame.


2

Interpola sempre quando puoi.

Quando non si dispone di informazioni sufficienti per interpolare, è necessario estrapolare.

È davvero così semplice, non pensarci troppo :)

Per spiegare un po 'di più:

In generale l'interpolazione è migliore perché l'interpolazione ha sempre ragione. Per estrapolare devi indovinare. Quindi devi affrontare ciò che accade quando indovina, il che porta alla formazione di bande o scoppietti di gomma e a tutti i tipi di sistemi per gestire tutto ciò e mascherarlo.

Cosa succede se estrapoli una posizione della mazza e la mostri andare nel posto giusto e far rimbalzare la palla, per poi accorgerti che hai sbagliato e che non ha fatto rimbalzare la palla? Non esiste un buon modo per gestire quello scenario.


oh ok così nel pong, la paletta dell'utente è prevista e la palla e l'altra paletta sono interpolate?
J leong,

Dipende interamente da come lo si implementa. Vedi la mia modifica per ulteriori informazioni.
Tim B

2

Interpoli per trovare stati tra valori noti e estrapoli per trovare stati futuri.

Pensa al problema in termini di variabili di stato, come posizioni e velocità. Nel migliore dei casi, ogni computer che deve lavorare con lo stato ha accesso ai dati dello stato per il tempo su cui vuole lavorare. Ad esempio, un algoritmo di collisione per vedere se il fucile laser sparato X intercetta la testa del giocatore A, il migliore di tutti i casi è quando l'algoritmo conosce la posizione esatta di ogni oggetto al momento del fuoco del laser.

Nel mondo reale, non siamo sempre così fortunati. A volte le informazioni sulla verità che riceviamo sono più scarse. Ad esempio, se il giocatore A è un giocatore remoto su un altro computer, potresti non sapere esattamente dove stanno andando quando spari il laser e devi calcolare il tiro. In questo caso, è necessario creare uno stimatore per la posizione di A, in genere con interpolazione o estrapolazione.

La differenza tra i due è se si dispone di dati limitati su entrambi i lati o solo su un lato. Diciamo che il giocatore A ha già annunciato la posizione di verità per t = 0 et = 1. Il giocatore B spara un laser a t = 0,5. In molte situazioni, l'annuncio del giocatore A della sua posizione in t = 1 può avvenire prima che il giocatore B prema il grilletto. Perché? In molti giochi, la reattività dei controlli è tutt'altro che perfettamente istantanea. In una simulazione di corsa, gran parte della posizione del giocatore è limitata dalla fisica di un veicolo in movimento. Puoi scegliere di annunciare una "posizione futura" perché sai che non puoi davvero guidare così tanto in un breve periodo. Se hai informazioni in futuro, puoi interpolare tra i due valori.

Cosa succede se non sei abbastanza fortunato da avere un valore = 1? Cosa succede se il giocatore A non è in grado di annunciare la sua posizione futura e sei bloccato a decidere se colpire o perdere solo con le informazioni da t = 0? In questo caso devi estrapolare. In estrapolazione, usi ciò che sai del movimento per estenderti oltre i dati che hai. Potresti sapere che il giocatore A ha una certa velocità, quindi presumi che se lo moltiplichi per tempo, puoi ottenere una posizione in ogni momento.

La differenza sta nei comportamenti. L'interpolazione richiede di avere un limite superiore e inferiore, che non sempre si ha. Tuttavia, in quasi tutte le situazioni ha risultati notevolmente migliori dell'estrapolazione. L'estrapolazione può facilmente portare a movimenti non realistici. Considera il caso di un giocatore che sta saltando da sinistra a destra per evitare di essere colpito mentre avanza. In un dato momento, la loro velocità è lungo una diagonale, quindi se estrapoli, il giocatore può sembrare scappare di lato quando, in realtà, non lo fanno mai. Se si esegue solo l'interpolazione, i valori tendono a non allontanarsi da valori realistici.

Interpolazione ed estrapolazione sono due estremi nel mondo del filtraggio. Esistono molti molti molti molti filtri per gestire dati come questo che mescolano e abbinano le proprietà tra interpolazione ed estrapolazione. Di conseguenza, non sorprenderti se vedi algoritmi che non sono chiaramente interpolati o chiaramente estrapolati. Quei due sono solo la punta dell'iceberg.


1

L'interpolazione utilizza dati noti per calcolare un dato all'interno dei limiti del set di dati (compreso il prefisso "interno"). L'estrapolazione sta calcolando un dato al di fuori dei limiti dei dati esistenti (oltre al prefisso "esterno"). Entrambi sono usati per sintetizzare dati aggiuntivi, con l'esatto metodo di calcolo che definisce l'affidabilità attesa dei dati generati.

O per metterlo in un diagramma molto semplice:

A - - - - - B - - - - - C - - - - - D

Dati i punti dati Ae Cpuoi interpolare Bed estrapolare D.


L'accuratezza di un'interpolazione o di un'estrapolazione dipende interamente dalla capacità di tenere conto di ogni variabile nel calcolo. Se conosci tutte le variabili e hai un'equazione che le rappresenta tutte, puoi interpolare o estrapolare con uguale facilità.

Per la meccanica di gioco i fattori limitanti saranno i punti in cui le variabili sono influenzate in modo imprevedibile, sia dal giocatore che da qualche elemento casuale o pseudo-casuale.

Ad esempio, il movimento di una palla in Breakout (nella sua forma più semplice) può essere estrapolato fino al punto in cui potrebbe potenzialmente interagire con la paletta del giocatore. Tutte le variabili possono essere contabilizzate fino a quel punto e quindi puoi modellare con precisione le azioni della palla. Quando raggiunge il punto in cui è possibile l'interazione del giocatore, ci sono un certo numero di possibili esiti e nessun modo di modellare accuratamente quale di questi sarà il caso fino a quando non si verificherà effettivamente. Questo è il limite predittivo del modello di fisica del gioco.

L'interpolazione è più semplice nei giochi perché stai lavorando con punti noti e non devi chiederti se le condizioni cambieranno. Inoltre hai il pieno controllo delle variabili coinvolte e puoi utilizzare qualsiasi regola definita per determinare il percorso di un oggetto. Più complesse sono le regole, più difficile può essere l'interpolazione.

Per il movimento dell'oggetto con semplici collisioni in uno spazio di gioco privo di gravità (come Breakout o Pong) il meccanismo di interpolazione lungo una linea sul percorso è una semplice interpolazione lineare dei punti, e lo stesso calcolo può essere utilizzato per estrapolare la linea in test per future collisioni. Una volta rilevata una collisione, è possibile estrapolare l'effetto di tale collisione sugli oggetti coinvolti.


Questa è esattamente la differenza tra le parole. Il motivo per cui abbiamo parole diverse per indovinare B e D quando tutto ciò che abbiamo è A e C è perché indovinare B correttamente è molto più facile che indovinare D correttamente. Gli esperti di artiglieria chiamano il backpol interpolato. Ricevono due colpi di marcatura ai lati di te, sei morto se non ti muovi. Estrapolare è ciò che stai cercando di fare quando giochi in borsa dopo aver visto i grafici dei prezzi delle azioni. L'estrapolazione è dura.
candied_orange,

@CandiedOrange Estrapolare sistemi complessi è difficile, ma lo è anche l'interpolazione. Dipende dalla qualità dei punti dati e dalla prevedibilità del sistema. Se riesci a ricavare un'equazione accurata che descrive il sistema, puoi interpolare o estrapolare con precisione: le linee sono semplici da estrapolare, le curve possono esserlo, i mercati azionari non tanto.
Corey,

Per duro intendo che l'interpolazione ti dà il teorema fondamentale del calcolo su cui ricorrere. Extrapolating no. A e C ti dicono che B è da qualche parte che ha reso possibile C dato che A. Chiedere D sta chiedendo di prevedere il futuro. Per quanto ne sai, C è dove è morto il giocatore. Quale è più affidabile e accettabile: interpolazione o estrapolazione? why-is-extrapolation-riskier-than-interpolation
candied_orange

@CandiedOrange Certo, l'estrapolazione è limitata al grado in cui è possibile controllare e prevedere tutte le variabili rilevanti. Così è l'interpolazione. Date due posizioni che un giocatore ha occupato in passato, non è possibile necessariamente interpolare con precisione un punto intermedio poiché il giocatore potrebbe essere passato da un percorso diretto o ottimale. Entrambi i metodi sono limitati.
Corey

Certo, entrambi sono limitati. Ma uno distrugge le carriere più spesso dell'altro. Indovina quale. La mia affermazione non è che l'interpolazione sia perfetta. È che vederli avere lo stesso potere predittivo è pericoloso.
candied_orange

0

La risposta breve: interpoli quando devi stimare un valore tra due valori noti (ovvero: in un'ora il valore è 1, in 3 ore è tre, per interpolare il valore a 2 al valore più probabile 2, con il dato valori). Extrapolate è quando l'ignoto è al di fuori di ciò che conosci, quindi quando 1 e 2 sono noti puoi fare un'ipotesi istruita su 3.

Interpolare: tra Extrapolate: esterno

Le lunghe risposte qui sono probabilmente molto più accurate e scientificamente corrette, ma spero che la mia semplice spiegazione possa avere senso per alcuni

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.