Коли слід екстраполювати і коли слід інтерполювати?


16

У мене виникають проблеми з розумінням, коли слід екстраполювати та коли інтерполювати. У гейфері щодо ігор він сказав, що інтерполювати, але потім в іншій статті рекомендував екстраполювати гравця. Тож моє запитання - коли краще екстраполювати і коли краще інтерполювати?


22
Є два види людей. Ті, хто може екстраполювати з неповних даних
Алмо

2
@Almo та що іншого виду? Скажіть будь ласка, я мушу знати!
DJMcMayhem

4
@DJMcMayhem ... і ті, хто любить їсти рибні пальчики.
користувач253751

4
Я не розумію питання. Чи можете ви пояснити один із способів "інтерполювати" точок {(1, a), (2, b)} передбачити c в (3, c)? І як би ви це екстраполювали?
користувач541686

Відповіді:


29

Ви інтерполюєте, коли знаєте значення "до" та "після".

Наприклад: у грі "натискання на клік" гравець зараз перебуває на позиції X, а зі свого інтерфейсу він клацає на місці Y. Ви повинні інтерполювати зміщення між X і Y, оскільки ви знаєте два значення.

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

Наприклад: у грі від першої особи гравець перебуває у позиції X, і він натискає стрілку вгору на своїй клавіатурі протягом останньої секунди, ви можете припустити, що він буде робити це знову на наступну секунду, тому що це в основному найчастіша поведінка у вашій грі; тому ви екстраполюєте позицію, що він буде наступним кадром. Сервер надсилає його іншим ігровим клієнтам, це пояснює затримку передачі з сервера гравцям.

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


Я розумію цю частину, але те, що я не розумію, це коли я повинен використовувати кожну. Як, наприклад, якщо я інтерполюю гравця, буде затримка, щоб він фактично побачив рух, але якщо я екстраполюю, він буде більш миттєвим, але він може бути неточним і його потрібно буде виправити. Як правило, більш бажаним є миттєвий рух від екстраполяції або більш послідовний рух від інтерполяції?
J leong

@Jleong Ви хочете, щоб гра була максимально гладкою для користувачів. Ви інтерполюєте поточний стан гри, і ви екстраполюєте, як це буде в пару кадрів. Ви надсилаєте екстрапольовані значення іншим плеєрам для обліку затримки в передачі мережі. Якби ви надсилали інтерпольовані значення, гра, здавалося б, відстає, і це не буде весело. (Я відредагував свою відповідь. Я сподіваюся, що це трохи прояснить її.)
Vaillancourt

Ой так, екстраполяція використовується, коли ви хочете, щоб клієнт передбачив, що буде? Якщо так, то в чому сенс інтерполяції, якщо ви завжди можете екстраполювати, щоб гра була близькою до реального часу? Так, на зразок FPS, чи буде гравець екстрапольований, а інші гравці будуть інтерпольовані?
J leong

Як правило, сервер робить все: він інтерполює те, що знає, і виходячи з цього, екстраполює значення і надсилає їх клієнтам, щоб вони вчасно прибули, щоб їх представили гравцям. У FPS інтерполяція використовується для відображення таких речей, як снаряди, AI тощо. Під час виконання Frame B (що надходить з Frame A) він буде інтерполювати значення для стану Frame B; він також може почати прогнозувати Frame C шляхом інтерполяції відомих значень, але йому доведеться екстраполювати значення, про які він не знає (введення гравця). Потім він відправить клієнту стан "майбутнього".
Vaillancourt

@Jleong Не замислюючись про різницю між клієнтом і сервером, я можу використовувати інтерполяцію, щоб отримати місце десь між двома відомими точками (для таких речей, як перевірка зіткнення, що могло статися між кадрами), або далі, взяти цей набір даних і отримати такі речі, як швидкість / траєкторія та прискорення, з урахуванням набору точок і з огляду на останню відому швидкість / прискорення / траєкторію, я можу екстраполювати місце, де вони можуть бути в майбутньому, припускаючи послідовний часовий проміжок. Для зв'язку між сервером і клієнтом використовується "оптимістична" екстрапольована позиція.
Норгуард

14

Інтерполяція робиться, коли у вас є і початкове, і кінцеве значення, і ви хочете оцінити, що відбувається між цим початковим і кінцевим значенням. Прикладом може бути переміщення гравця з Позиції А на Позицію В флюїдним рухом.

Екстраполяція, робиться тоді, коли у вас є початкове значення, але ще немає даних для кінця. Потім можна екстраполювати залежно від наявних даних. Наприклад, виходячи з попередніх рухів гравця, ви можете визначити, де він, ймовірно, буде в наступному кадрі.


2

Завжди інтерполюйте, коли можете.

Якщо у вас не вистачає інформації для інтерполяції, вам потрібно зробити екстраполяцію.

Це дійсно так просто, не передумуй :)

Щоб пояснити трохи більше:

Взагалі інтерполяція краща, оскільки інтерполяція завжди права. Для екстраполяції ви повинні здогадатися. Тоді вам доведеться розібратися з тим, що відбувається, коли ви здогадаєтеся не так, що призводить до перев’язування гуми або вискакування та всіляких систем для вирішення цього питання та маскування.

Що станеться, якщо ви екстраполювали позицію кажана і показали, що вона рухається в потрібне місце і підстрибуючи м'яч, а потім зрозумієте, що ви помилилися, і він не відскочив м'яч? Немає хорошого способу впоратися з таким сценарієм.


ой нормально, так у понг передбачується лопатка користувача, а м'яч та інші весла інтерполюються?
J leong

Це повністю залежить від того, як ви це реалізуєте. Дивіться мою редакцію для отримання додаткової інформації.
Тім Б

2

Ви інтерполюєте, щоб знайти стани між відомими значеннями, і екстраполюєте для пошуку майбутніх станів.

Подумайте про проблему з точки зору змінних стану, наприклад позицій та швидкостей. У кращому з усіх сценаріїв кожен комп'ютер, який повинен працювати з державою, має доступ до даних про стан, протягом якого він хоче працювати. Наприклад, алгоритм зіткнення, щоб дізнатись, чи вистрілила лазерна гвинтівка X головою гравця A інтересета, найкраще з усіх випадків, коли алгоритм знає точне положення кожного об'єкта на момент запуску лазера.

У реальному світі нам не завжди так пощастило. Іноді інформація про правду, яку ми отримуємо, є більш рідкісною. Наприклад, якщо гравець A є віддаленим гравцем на іншому комп’ютері, ви, можливо, не знаєте, куди вони прямують, коли ви запускаєте лазер, і вам потрібно обчислити постріл. У цьому випадку потрібно створити оцінку позиції А, як правило, з інтерполяцією чи екстраполяцією.

Різниця між ними полягає в тому, чи є у вас дані, які обмежені з обох сторін, або лише одна сторона. Скажімо, що Гравець А вже оголосив свою позицію правди для t = 0 і t = 1. Гравець B стріляє лазером при t = 0,5. У багатьох ситуаціях повідомлення гравця A про свою позицію при t = 1 може відбуватися до того, як гравець B натисне курок. Чому? У багатьох іграх чутливість елементів управління менш ніж ідеально миттєва. У гоночному моделюванні значна частина позицій гравця обмежена фізикою руху транспортного засобу. Ви можете вирішити оголосити "майбутню позицію", тому що ви знаєте, що дійсно не можете керувати всім цим за короткий період. Якщо у вас є інформація в майбутньому, ви можете інтерполювати між двома значеннями.

Що робити, якщо вам не пощастить мати значення = 1? Що робити, якщо програвач A не зміг оголосити про своє майбутнє місцезнаходження, і ви затрималися, вирішуючи, чи потрапили ви чи пропустили лише інформацію з t = 0? У цьому випадку вам доведеться екстраполювати. При екстраполяції ви використовуєте те, що знаєте про рух, щоб вийти за рамки будь-яких даних, які у вас є. Ви можете знати, що гравець А має певну швидкість, тому припускайте, що якщо ви помножите це на час, ви зможете отримувати позицію кожного разу.

Різниця полягає у поведінці. Інтерполяція вимагає, щоб ви мали верхню та нижню межі, яких у вас не завжди. Однак майже у всіх ситуаціях він має набагато кращі результати, ніж екстраполяція. Екстраполяція може легко призвести до нереальних рухів. Розглянемо випадок гравця, який бігає вліво і вправо, щоб уникнути удару під час просування. У будь-який момент часу їх швидкість йде по діагоналі, тому, якщо ви екстраполюєте, гравець може здатися бігти в бік, коли, власне, це ніколи не відбувається. Якщо ви робите лише інтерполяцію, значення, як правило, не збиваються з-за реалістичних значень.

Інтерполяція та екстраполяція - дві крайності у світі фільтрації. Існує багато-багато-багато-багато фільтрів для обробки таких даних, які змішують і співпадають властивості між інтерполяцією та екстраполяцією. Відповідно, не дивуйтеся, якщо ви бачите алгоритми, які не є чітко інтерполяцією чи явно екстраполяцією. Ці два - лише верхівка льодового Бергу.


1

Інтерполяція використовує відомі дані для обчислення даної в межах набору даних (interfie - префікс "всередині"). Екстраполяція - це обчислення даної за межами існуючих даних (екстраполяція префікса "зовні"). Обидва використовуються для синтезу додаткових даних, при цьому точний метод обчислення визначає очікувану надійність генерованих даних.

Або поставити його в дуже простій схемі:

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

З урахуванням точок даних Aі Cви можете інтерполюватиB і екстраполювати D.


Точність інтерполяції чи екстраполяції повністю залежить від того, наскільки добре ви можете врахувати кожну змінну в обчисленні. Якщо ви знаєте всі змінні та маєте рівняння, яке враховує всі вони, то ви можете з однаковою легкістю інтерполювати чи екстраполювати.

Для ігрової механіки обмежуючими факторами будуть точки, на які на змінні впливають непередбачувані способи, або гравець, або якийсь випадковий або псевдовипадковий елемент.

Наприклад, рух м'яча в Breakout (у його найпростішому вигляді) може екстраполюватися аж до тієї точки, де він може потенційно взаємодіяти з веслом гравця. Всі змінні можна враховувати до цього моменту, і тому ви зможете точно моделювати дії кулі. Коли вона досягне того пункту, коли можлива взаємодія гравців, то існує ряд можливих результатів, і немає способу точно моделювати, який із них буде таким, доки насправді це не відбудеться. Це межа прогнозування моделі фізики ігор.

Інтерполяція простіша в іграх, оскільки ви працюєте з відомими моментами і не потрібно замислюватися, чи зміниться умови. Далі ви маєте повний контроль над залученими змінними та можете використовувати будь-які визначені вами правила для визначення шляху об’єкта. Чим складніші правила, тим складніше може бути інтерполяція.

Для руху об'єкта з простими зіткненнями в гравітаційному просторі, не гравітаційному (наприклад, Breakout або Pong), механізм інтерполяції вздовж лінії на шляху є простою лінійною інтерполяцією точок, і той самий розрахунок можна використовувати для екстраполяції лінії на тест на майбутні зіткнення. Після виявлення зіткнення ви можете екстраполювати вплив цього зіткнення на об'єкти, що беруть участь.


Це саме різниця між словами. Причина, коли ми маємо різні слова для відгадування B і D, коли все, що ми маємо, є A і C, тому що відгадати B правильно набагато простіше, ніж здогадуватися D правильно. Експерти артилерії називають інтерполяційну затірку. Вони отримують два раунди відмітки в обидві сторони від вас, ви мертві, якщо не рухаєтесь. Екстраполяція - це те, що ви намагаєтеся робити, граючи на фондовому ринку, переглядаючи графіки цін акцій. Екстраполяція важка.
candied_orange

@CandiedOrange Екстраполяція складних систем складна, але це інтерполяція. Це залежить від якості ваших точок даних та наскільки передбачувана система. Якщо ви можете отримати точне рівняння, яке описує систему, тоді ви можете інтерполювати або екстраполювати з точністю - лінії просто екстраполювати, криві можуть бути, фондових ринків не так багато.
Корі

Я важко маю на увазі, що інтерполяція дає тобі фундаментальну теорему обчислення, на яку слід відмовитися. Екстраполяція не робить. A і C скажуть вам, що B десь зробив це можливим, якщо А. Просити D просить передбачити майбутнє. За всім, що ви знаєте, C - там, де помер гравець. Який із них більш надійний та прийнятний: Інтерполяція чи екстраполяція? чому-є-екстраполяція-більш ризикована, ніж інтерполяція
candied_orange

@CandiedOrange Звичайно, екстраполяція обмежена ступенем, коли ви можете контролювати та прогнозувати всі відповідні змінні. Так є інтерполяція. Враховуючи дві позиції, які гравця займав у минулому, ви не завжди можете точно інтерполювати середину, оскільки гравець, можливо, змінив прямий або оптимальний шлях. Обидва методи обмежені.
Корі

Звичайно, обидва обмежені. Але одна руйнує кар’єру частіше, ніж інша. Вгадайте, який. Моє твердження не в тому, що інтерполяція є ідеальною. Це те, що бачити, як вони мають однакову силу передбачення, небезпечно.
candied_orange

0

Коротка відповідь: ви інтерполюєте, коли вам доведеться оцінити значення між двома відомими значеннями (тобто: за одну годину значення дорівнює 1, через 3 години - три, щоб інтерполювати значення на 2 при найімовірнішому значенні 2, при цьому значення). Екстраполят - це коли невідоме знаходиться поза тим, що ви знаєте, тож коли відомо 1 і 2, ви можете зробити здогадку про 3.

Інтерполяція: між Екстраполятом: зовні

Тут довгі відповіді, швидше за все, є більш точними та науково правильними, але я сподіваюся, що моє просте пояснення може мати сенс для деяких

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.