Когда я должен экстраполировать и когда я должен интерполировать?

16

У меня проблемы с пониманием, когда экстраполировать, а когда интерполировать. В gaffer об играх он сказал, что нужно интерполировать, но затем в другой статье он рекомендовал экстраполировать игрока. Поэтому мой вопрос: когда лучше экстраполировать, а когда лучше интерполировать?

Дж Леонг
источник
22
Есть два типа людей. Те, кто может экстраполировать из неполных данных
Almo
2
@ Альмо, а какой другой? Пожалуйста, скажите мне, я должен знать!
DJMcMayhem
4
@DJMcMayhem ... и те, кто любит есть рыбные палочки.
user253751
4
Я не понимаю вопроса. Можете ли вы объяснить один способ «интерполировать» точки {(1, a), (2, b)} для прогнозирования c в (3, c)? И как бы вы это экстраполировали?
user541686

Ответы:

29

Вы интерполируете, когда знаете значения «до» и «после».

Например: в игре «укажи и щелкни» игрок в настоящее время находится в позиции X, и из своего интерфейса он щелкает по точке Y. Вы должны интерполировать смещение между X и Y, поскольку вы знаете эти два значения.

Вы экстраполируете, когда угадываете, что будет в будущем, исходя из того, что вы уже знаете.

Например: в шутере от первого лица, игрок находится в положении X, и он нажимает стрелку ВВЕРХ на клавиатуре в течение последней секунды, вы можете предположить, что он будет делать это снова в течение следующей секунды, потому что это в основном самое частое поведение в вашей игре; так что вы экстраполируете позицию, что он будет в следующем кадре. Сервер отправляет его другим игровым клиентам, это учитывает задержку передачи с сервера игрокам.

Экстраполяция используется в основном для прогнозирования движения. Он не нужен игровому серверу , но игровые клиенты нуждаются в нем, чтобы отображать несколько реалистичное и актуальное представление о состоянии игры, чтобы дать игрокам приятный визуальный опыт.

Vaillancourt
источник
Я понимаю эту часть, но я не понимаю, когда мне следует использовать каждую из них. Как, например, если я интерполирую игрока, у него будет задержка, чтобы он действительно увидел движение, но если я экстраполирую его, оно будет более мгновенным, но оно может быть неточным и его нужно будет исправить. Обычно более желательно иметь мгновенное движение от экстраполяции или более последовательное движение от интерполяции?
J Леонг
@Jleong Вы хотите, чтобы игра была представлена ​​как можно более гладкой для пользователей. Вы интерполируете текущее состояние игры, и вы экстраполируете, как это будет в паре кадров. Вы отправляете экстраполированные значения другим игрокам для учета задержки в передаче по сети. Если бы вы отправили интерполированные значения, игра показалась бы запаздывающей, и это было бы неинтересно. (Я отредактировал свой ответ. Надеюсь, он прояснит его немного подробнее.)
Vaillancourt
о хорошо, так что экстраполяция используется, когда вы хотите, чтобы клиент предсказал, что произойдет? Если это так, то какой смысл интерполировать, если вы всегда можете экстраполировать, чтобы держать игру близкой к реальному времени? так как для FPS, будет ли игрок экстраполирован, а другие игроки будут интерполированы?
J Леонг
Обычно сервер делает все: он интерполирует то, что ему известно, и на основании этого он экстраполирует значения и отправляет их клиентам, чтобы они прибыли вовремя, чтобы быть представленными игрокам. В FPS интерполяция используется для отображения таких вещей, как снаряды, ИИ и тому подобное. При выполнении кадра B (из кадра A) он будет интерполировать значения для состояния кадра B; он также может начать прогнозирование Кадра C путем интерполяции известных значений, но ему придется экстраполировать значения, о которых он не знает (входные данные игрока). Затем он отправит «будущее» состояние клиенту.
Vaillancourt
@Jleong Не думая о разнице между клиентом и сервером, я могу использовать интерполяцию, чтобы получить положение где-то между двумя известными точками (например, для проверки столкновения, которое могло произойти между кадрами), или, далее, взять этот набор данных и получить такие вещи, как Скорость / траектория и ускорение, с учетом набора точек и с учетом последней известной скорости / ускорения / траектории, я могу экстраполировать, где эти объекты могут быть, в будущем, предполагая согласованные временные рамки. Для связи сервер-клиент используется «оптимистическая» экстраполированная позиция.
Норгард
14

Интерполяция выполняется, когда у вас есть начальное и конечное значение, и вы хотите оценить, что происходит между этим начальным и конечным значением. Примером может быть перемещение игрока из положения A в положение B плавным движением.

Экстраполяция выполняется, когда у вас есть начальное значение, но еще нет данных для конца. Затем вы можете экстраполировать на основе имеющихся у вас данных. Например, основываясь на предыдущих движениях игрока, вы можете определить, где он, вероятно, будет в следующем кадре.

jgallant
источник
2

Всегда интерполируйте, когда можете.

Если у вас недостаточно информации для интерполяции, вам нужно экстраполировать.

Это действительно так просто, не переусердствуйте :)

Чтобы объяснить немного больше:

В общем, интерполяция лучше, потому что интерполяция всегда правильная. Для экстраполяции нужно угадать. Затем вам приходится иметь дело с тем, что происходит, если вы догадаетесь неправильно, что приводит к резиновому бинтованию или появлению трещин и всевозможным системам, чтобы справиться со всем этим и замаскировать его.

Что произойдет, если вы экстраполировали положение летучей мыши и показали, что она движется в нужном месте и отскакивает мяч, а затем понимаете, что вы ошиблись, и мяч не отскочил? Нет хорошего способа справиться с этим сценарием.

Тим Б
источник
о хорошо, так в понг, весло пользователя предсказано, и шар и другое весло интерполированы?
J Леонг
Это полностью зависит от того, как вы это реализуете. Смотрите мою правку для получения дополнительной информации.
Тим Б
2

Вы интерполируете, чтобы найти состояния между известными значениями, и вы экстраполируете, чтобы найти будущие состояния.

Думайте о проблеме в терминах переменных состояния, таких как положения и скорости. В лучшем из всех сценариев каждый компьютер, который должен работать с состоянием, имеет доступ к данным состояния в течение времени, когда они хотят работать. Например, алгоритм столкновения, позволяющий увидеть, выстрелил ли из лазерной винтовки X игрок А, в лучшую сторону, лучший из всех случаев, когда алгоритм знает точное положение каждого объекта в момент запуска лазера.

В реальном мире нам не всегда так везет. Иногда информация правды, которую мы получаем, более скудна. Например, если игрок А является удаленным игроком на другом компьютере, вы можете не знать точно, куда они идут, когда вы запускаете лазер, и вам нужно рассчитать выстрел. В этом случае вам необходимо создать оценщик для позиции А, обычно с интерполяцией или экстраполяцией.

Разница между ними заключается в том, есть ли у вас данные, ограниченные с обеих сторон, или только с одной стороны. Допустим, игрок A уже объявил свою правдивую позицию для t = 0 и t = 1. Игрок B стреляет лазером при t = 0,5. Во многих ситуациях объявление игрока A о своей позиции в момент времени t = 1 может произойти до того, как игрок B нажмет на курок. Почему? Во многих играх отзывчивость элементов управления менее чем мгновенная. В гоночном симуляции большая часть позиции игрока ограничена физикой движущегося транспортного средства. Вы можете объявить «будущую позицию», потому что знаете, что действительно не сможете управлять всем этим за короткий период. Если у вас есть информация в будущем, вы можете интерполировать между двумя значениями.

Что если вам не повезло иметь значение = 1? Что если игрок А не был в состоянии объявить свое будущее местоположение, и вы застряли, решая, ударили вы или пропустили только информацию с t = 0? В этом случае вы должны экстраполировать. В экстраполяции вы используете то, что знаете о движении, чтобы выйти за пределы ваших данных. Возможно, вы знаете, что у игрока А есть определенная скорость, поэтому предположите, что если вы умножите ее на время, вы сможете получить позицию в каждый раз.

Разница в поведении. Интерполяция требует, чтобы у вас была верхняя и нижняя границы, которые вы не всегда имеете. Однако почти во всех ситуациях он дает значительно лучшие результаты, чем экстраполяция. Экстраполяция может легко привести к нереалистичным движениям. Рассмотрим случай, когда игрок обходит стороной влево и вправо, чтобы не быть застреленным во время продвижения. В любой момент их скорость находится по диагонали, поэтому, если вы экстраполируете, игрок может уйти в сторону, хотя на самом деле он этого не делает. Если вы выполняете только интерполяцию, значения не отклоняются от реалистичных значений.

Интерполяция и экстраполяция - две крайности в мире фильтрации. Существует много-много-много-много фильтров для обработки таких данных, которые смешивают и сопоставляют свойства между интерполяцией и экстраполяцией. Соответственно, не удивляйтесь, если увидите алгоритмы, которые не имеют четкой интерполяции или явно экстраполяции. Эти двое - лишь верхушка айсберга.

Корт Аммон - Восстановить Монику
источник
1

Интерполяция использует известные данные для вычисления данных в пределах набора данных (в том числе префикс «изнутри»). Экстраполяция - это расчет данных за пределами существующих данных (за исключением префикса «outside»). Оба используются для синтеза дополнительных данных, причем точный метод расчета определяет ожидаемую достоверность сгенерированных данных.

Или поместить это в очень простую диаграмму:

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

Учитывая данные точек, Aи Cвы можете интерполировать Bи экстраполировать D.


Точность интерполяции или экстраполяции полностью зависит от того, насколько хорошо вы можете учесть каждую переменную в расчете. Если вы знаете все переменные и имеете уравнение, которое учитывает все из них, то вы можете с одинаковой легкостью интерполировать или экстраполировать.

Для игровой механики ограничивающими факторами будут точки, в которых на переменные влияют непредсказуемым образом, либо игроком, либо каким-либо случайным или псевдослучайным элементом.

Например, движение мяча в Breakout (в его простейшей форме) можно экстраполировать вплоть до точки, где он потенциально может взаимодействовать с веслом игрока. Все переменные могут быть учтены до этой точки, и вы можете точно моделировать действия мяча. Когда он достигает точки, где возможно взаимодействие с игроком, появляется ряд возможных результатов, и нет способа точно смоделировать, какой из них будет иметь место, пока это не произойдет. Это предиктивный предел модели физики игры.

В играх интерполяция проще, потому что вы работаете с известными точками и не должны задаваться вопросом, изменятся ли условия. Кроме того, вы имеете полный контроль над задействованными переменными и можете использовать любые правила, которые вы определили для определения пути объекта. Чем сложнее правила, тем сложнее интерполировать.

Для движения объекта с простыми столкновениями в игровом пространстве без гравитации (например, Breakout или Pong) механизм интерполяции вдоль линии на траектории представляет собой простую линейную интерполяцию точек, и тот же расчет можно использовать для экстраполяции линии на тест для будущих столкновений. После обнаружения столкновения вы можете экстраполировать эффект этого столкновения на вовлеченные объекты.

Corey
источник
Это точно разница между словами. Причина, по которой у нас есть разные слова для угадывания B и D, когда у нас есть только A и C, заключается в том, что правильно угадать B гораздо проще, чем правильно угадать D. Артиллерийские эксперты называют интерполяционным защитным покрытием. Они получают два раунда по обеим сторонам от вас, вы мертвы, если не двигаетесь. Экстраполяция - это то, что вы пытаетесь сделать, когда играете на фондовом рынке после просмотра графиков цен акций. Экстраполировать это сложно.
candied_orange
@CandiedOrange Экстраполировать сложные системы сложно, но также интерполировать. Это зависит от качества ваших данных и от того, насколько предсказуема система. Если вы можете получить точное уравнение, которое описывает систему, то вы можете интерполировать или экстраполировать с точностью - линии просто экстраполировать, кривые могут быть, фондовые рынки не так уж и много.
Кори
Я имею в виду, что интерполяция дает вам фундаментальную теорему исчисления, на которую можно вернуться. Экстраполировать не надо. A и C говорят вам, что B находится где-то, что сделало возможным C, учитывая A. Запрос D требует предсказания будущего. Для всего, что вы знаете C, где игрок умер. Какой из них более надежен и приемлем: интерполяция или экстраполяция? почему-экстраполяция-более рискованно, чем интерполяция
candied_orange
@CandiedOrange Конечно, экстраполяция ограничена степенью, в которой вы можете контролировать и прогнозировать все соответствующие переменные. Так же как и интерполяция. Учитывая две позиции, которые игрок занимал в прошлом, вы не можете точно интерполировать среднюю точку, поскольку игрок мог отклониться от прямого или оптимального пути. Оба метода ограничены.
Кори
Конечно, оба ограничены. Но один разрушает карьеру чаще, чем другой. Угадай что. Я утверждаю, что интерполяция не идеальна. Это то, что видеть их с одинаковой предсказательной силой опасно.
candied_orange
0

Краткий ответ: вы интерполируете, когда вам нужно оценить значение между двумя известными значениями (то есть: за один час значение равно 1, за 3 часа это три, чтобы интерполировать значение при 2 при наиболее вероятном значении 2 с заданным ценности). Экстраполирование - это когда неизвестное находится за пределами того, что вы знаете, поэтому, когда известны 1 и 2, вы можете сделать обоснованное предположение о 3.

Интерполировать: между Экстраполировать: снаружи

Длинные ответы здесь, скорее всего, более точные и научно правильные, но я надеюсь, что мое простое объяснение может иметь смысл для некоторых

Патрик
источник