У меня следующая проблема:
У меня есть список позиций Vector3 объекта, который я отслеживал в Unity (например, анимированная сфера, летящая по какой-то дорожке). Я добавляю его положение в каждом кадре в Список. Что приводит к сумме, например, 500 значений. Когда анимация остановилась, я хочу «очистить» записанный трек и сохранить только самые отчетливые значения (в правильном порядке). Но List.Count должен быть ТОЧНО 100. Поэтому он должен проверять "равные" значения с порогом.
Что я сделал до сих пор: я записываю положение «trackableObject» как Vector3 в каждом кадре и очищаю его напрямую (сохраняю только значения, которые находятся дальше, чем «cleanDiffTolerance» и / или имеют большую разницу углов, чем «cleanAngleMaxDiff») ). Таким образом, я получаю только значения для значительных изменений направления / расстояния и получаю больше точек на кривых / углах.
Что я хочу: очищать не каждый кадр, а после того, как я остановил запись. Затем я хочу сохранить только самые разные значения в правильном порядке и ровно 100 значений.
Вам нужно показать, что вы пытались сделать до сих пор. Мы здесь не для того, чтобы делать вашу работу / домашнее задание за вас.
Я редактировал своими "до сих пор попытками" :)
Это зависит от того, насколько точным должен быть ваш результат (и как вы определяете «точный»). Первый вопрос:
100 значений должны быть точными значениями позиции из первого списка, или это нормально, если оно рядом.
Значения позиции не будут сильно меняться каждый кадр. Простой способ решить проблему - усреднить каждый шаг:
n = totalValues/100
n
и сохраните среднее значение в окончательном списке.n
и т. д.В качестве альтернативы, если вам нужны точные значения, замените шаг 2, например, на «взять первое значение группы».
Этот подход будет достаточно точным, если движение будет плавным. Проблема заключается в том, что если у вас есть внезапное изменение положения (например, угол вместо плавного поворота), вы, скорее всего, не получите точного положения, в котором возникает угол. Единственное решение для их выявления - провести более предварительный анализ. Например, вы можете выполнить поиск в Google по запросу "Фильтр высоких частот".
Я бы порекомендовал сначала попробовать простой подход и посмотреть, подходит ли он для ваших нужд.
Большое спасибо за ответ. :) Думаю, ваше решение будет соответствовать моим потребностям, и если нет, я постараюсь сделать дополнительную фильтрацию внутри каждой группы. Я не нашел решения по поводу фильтров верхних частот, не связанного со звуками. Поэтому я думаю, что пока оставлю это.
Что ты уже сделал?