Сравнение двух фигур, составленных из точек (x, y), взятых на двух разных временных линиях в различной длине - PullRequest
0 голосов
/ 31 марта 2019

Я играю в единство (c #). В игре мне нужно сравнить фигуру, созданную игроком, с фигурами, которые я сохранил в базе данных, и решить, является ли она похожей на какую-либо из них, и если да, то насколько близка фигура, сделанная игроком, к сохраненной фигуре - будет 20 -50 фигур в конце.

-Shape - это список, в котором хранятся позиции пикселей xy позиции мыши при каждом обновлении игры (обновление в единстве происходит в разное время, но я могу переместить его в fixedUpdate, чтобы расстояние было одинаковым) , - Число точек, создающих форму, не является постоянным, и одна и та же форма может иметь очень разную длину точек. - Форма совпадения 100% должна быть такого же размера и выполнена в том же направлении, что и сохраненная форма. -У меня есть база данных, хранящая фигуры в списке.

Проблема заключается в том, что если я создаю любую фигуру, которая близка по расстоянию к краям фигуры, я сравниваю ее, возвращает небольшое значение, аналогичное попытке создать ту же самую фигуру.

  1. Я попытался использовать динамическую деформацию времени и сделал 2 различных массива для y и для x, а затем я суммировал 2 массива и сделал возврат, чтобы попытаться найти кратчайший путь.
  2. После этого я попытался использовать динамический деформирующий массив 2 времени для y и для x и выполнить отдельный возврат к каждому из и затем выполнить возврат, чтобы объединить путь 2.
  3. Позже я попытался использовать динамическую деформацию времени на atan2 (x, y) - из точек относительно начальной точки.
  4. И попытался использовать динамическое искажение времени при изменении угла между каждой точкой.

Я не буду добавлять все функции, только вызовы к ним, чтобы было легче понять (0 = x, 1 = y):

  1. computeBackwards (sum2Arrays (DtwArray (newShape, oldShape, 0), DtwArray (newShape, oldShape, 1)));

  2. computeBackwards (DtwArray (newShape, oldShape, 0)) + computeBackwards (DtwArray (newShape, oldShape, 1))

  3. computeBackwards (DtwArray (MagicShapeSaver.angleChangeMagic (newShape), MagicShapeSaver.angleChangeMagic (oldShape), 0))

  4. computeBackwards (DtwArray (MagicShapeSaver.angleChangeMagic (newShape), MagicShapeSaver.angleChangeMagic (oldShape), 0))

Если у вас есть представление о том, как я могу решить эту проблему - с dtw или без, это очень сильно меня остановит!

...