C# / Unity - как получить только определенные значения (с порогом) и определенное количество?

У меня следующая проблема:

У меня есть список позиций Vector3 объекта, который я отслеживал в Unity (например, анимированная сфера, летящая по какой-то дорожке). Я добавляю его положение в каждом кадре в Список. Что приводит к сумме, например, 500 значений. Когда анимация остановилась, я хочу «очистить» записанный трек и сохранить только самые отчетливые значения (в правильном порядке). Но List.Count должен быть ТОЧНО 100. Поэтому он должен проверять "равные" значения с порогом.

Что я сделал до сих пор: я записываю положение «trackableObject» как Vector3 в каждом кадре и очищаю его напрямую (сохраняю только значения, которые находятся дальше, чем «cleanDiffTolerance» и / или имеют большую разницу углов, чем «cleanAngleMaxDiff») ). Таким образом, я получаю только значения для значительных изменений направления / расстояния и получаю больше точек на кривых / углах.

Что я хочу: очищать не каждый кадр, а после того, как я остановил запись. Затем я хочу сохранить только самые разные значения в правильном порядке и ровно 100 значений.

Что ты уже сделал?

Alexus 18.12.2018 14:54

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

MattD 18.12.2018 14:55

Я редактировал своими "до сих пор попытками" :)

RunRockRise 18.12.2018 15:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
289
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это зависит от того, насколько точным должен быть ваш результат (и как вы определяете «точный»). Первый вопрос:

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

Значения позиции не будут сильно меняться каждый кадр. Простой способ решить проблему - усреднить каждый шаг:

  1. Вычислите, сколько значений должно быть сгруппировано вместе: n = totalValues/100
  2. Возьмите первые значения n и сохраните среднее значение в окончательном списке.
  3. Сделайте то же самое для следующих значений n и т. д.

В качестве альтернативы, если вам нужны точные значения, замените шаг 2, например, на «взять первое значение группы».

Этот подход будет достаточно точным, если движение будет плавным. Проблема заключается в том, что если у вас есть внезапное изменение положения (например, угол вместо плавного поворота), вы, скорее всего, не получите точного положения, в котором возникает угол. Единственное решение для их выявления - провести более предварительный анализ. Например, вы можете выполнить поиск в Google по запросу "Фильтр высоких частот".

Я бы порекомендовал сначала попробовать простой подход и посмотреть, подходит ли он для ваших нужд.

Большое спасибо за ответ. :) Думаю, ваше решение будет соответствовать моим потребностям, и если нет, я постараюсь сделать дополнительную фильтрацию внутри каждой группы. Я не нашел решения по поводу фильтров верхних частот, не связанного со звуками. Поэтому я думаю, что пока оставлю это.

RunRockRise 18.12.2018 18:58

Другие вопросы по теме