Проблема замера скорости по разнице между координатами, полученными в соседних по времени OnPlayerUpdate -
Mutha_X - 05.06.2017
Предисловие
Не стоит писать, что по GetVehicleVelocity можно получить абсолютно точную скорость передвижения транспорта в любой момент времени - это так. Другой вопрос, что по разнице 2-х GetVehiclePos можно на данный момент лишь дать грубую оценку скорости движения машины.
Данная тема посвящена возникшим вопросам по синхронизации и определению скоростей движения транспорта.
На опыте было показано, что пройденное расстояние (указывается умноженное в 100 раз) между двумя соседними по времени вызова OnPlayerUpdate может отличаться друг от друга в несколько раз. Подобная проблема проявляется и с разницей по времени между 2-мя OnPlayerUpdate, но менее выражена. Возможное решение кроется, например, в замере с периодом 1 секунду (девиация скорости действительно уменьшается), но такой способ замера скорости слишком грубый - нет возможности учесть ускорение за эту секунду либо интегрировать за 1 секунду пройденное расстояние по каждому OnPlayerUpdate, но тогда замеры получатся очень инерционными - машина может остановиться, а скорость будет ещё долго спадать (чем больше размер выборки - тем более инерционно, но более точно для постоянной скорости). Это всё рассчитывалось прямым методом (взял координаты, время, посчитал разницы и вычислил скорость).
Условия тестирований
Место/маршрут проведения: внешнее кольцо шоссе ЛВ.
Постоянная скорость: максимальная для выбранного транспорта, девиация скорости (по GetVehicleVelocity) <0.5%.
ФПС: 50.
IP: localhost
Тест №1: 2 круга на Infernus, размер выборки=6683 (разниц величин в OnPlayerUpdate)
Тест №2: 3 круга на Turismo, размер выборки=12580 (разниц величин в OnPlayerUpdate)
Таблица 1. Гистограммы измеренных величин
Величина | Тест №1 | Тест №2 |
Расстояние | | |
Время | | |
Скорость | | |
Таблица 2. Параметры распределений
№теста | Величина | Математическое ожидание | Дисперсия |
1 | Дистанция | 173.230714 | 3850.134739 |
2 | Дистанция | 151.541970 | 2932.528609 |
1 | Время | 28.171630 | 96.652221 |
2 | Время | 28.239348 | 99.437501 |
1 | Скорость | 6.261968 | 1.772077 |
2 | Скорость | 5.514038 | 2.175881 |
Вопросы:
- Каким законом наиболее точно аппроксимируются распределения по разнице времени и по скорости?
- Каким способом можно повысить точность вычисления скорости по пройденному расстоянию (или корректировать расстояние) так, чтобы за пару OnPlayerUpdate можно было рассчитать скорость с удовлетворительной скоростью (тупая интеграция 2х трапеций не вариант чёто)?
LOL
Re: Проблема замера скорости по разнице между координатами, полученными в соседних по времени OnPlayerUpdate -
ZiGGi - 05.06.2017
Частота вызова OnPlayerUpdate зависит от количества данных, переданных от игрока. Для измерения скорости обязательно нужно использовать фиксированное время. Можно воспользоваться отдельным таймером или использовать GetTickCount в OnPlayerUpdate.
Re: Проблема замера скорости по разнице между координатами, полученными в соседних по времени OnPlayerUpdate -
White_116 - 05.06.2017
Условно говоря клиент отправляет данные каждые 40мс. Но это в случае если игрок движется. Так же фпс может очень влиять на вычисление скорости, все относительно, клиент будет отсылать ускорение в н раз больше чем является само перемещение. Временые отметки в пакетах нужны...
Re: Проблема замера скорости по разнице между координатами, полученными в соседних по времени OnPlayerUpdate -
Mutha_X - 05.06.2017
Quote:
Originally Posted by ZiGGi
Частота вызова OnPlayerUpdate зависит от количества данных, переданных от игрока. Для измерения скорости обязательно нужно использовать фиксированное время. Можно воспользоваться отдельным таймером или использовать GetTickCount в OnPlayerUpdate.
|
В экспериментах и делалось именно так со временем.
Quote:
Originally Posted by White_116
Условно говоря клиент отправляет данные каждые 40мс. Но это в случае если игрок движется. Так же фпс может очень влиять на вычисление скорости, все относительно, клиент будет отсылать ускорение в н раз больше чем является само перемещение. Временые отметки в пакетах нужны...
|
По гистограмме можешь видеть, что время между соседними OnPlayerUpdate очень разная.
И откуда такая информация, что именно каждые 40 мс?
Re: Проблема замера скорости по разнице между координатами, полученными в соседних по времени OnPlayerUpdate -
White_116 - 05.06.2017
Quote:
Originally Posted by Mutha_X
По гистограмме можешь видеть, что время между соседними OnPlayerUpdate очень разная.
И откуда такая информация, что именно каждые 40 мс?
|
Разная потому, что пинг играет роль + 0..5мс (поток спит - указывается в конфиге сервера). А 40 мс ты выставляешь в настройках сервера (стандартное значение). В игре при нажатии F5 видно данное время.
Re: Проблема замера скорости по разнице между координатами, полученными в соседних по времени OnPlayerUpdate -
Mutha_X - 05.06.2017
Quote:
Originally Posted by White_116
Разная потому, что пинг играет роль + 0..5мс (поток спит - указывается в конфиге сервера). А 40 мс ты выставляешь в настройках сервера (стандартное значение). В игре при нажатии F5 видно данное время.
|
В игре указано 15 мс.
На сервере та же переменная 30 мс.
Ладно бы sleep 5.
Ладно бы просадок нет вообще (по фпс).
Ладно бы это единственное, что делает замеры в opu.
Откуда разница между OnPlayerUpdate выскакивает даже вдвое больше чем указанная величина на сервере?