Я играю в единство (c #).
В игре мне нужно сравнить фигуру, созданную игроком, с фигурами, которые я сохранил в базе данных, и решить, является ли она похожей на какую-либо из них, и если да, то насколько близка фигура, сделанная игроком, к сохраненной фигуре - будет 20 -50 фигур в конце.
-Shape - это список, в котором хранятся позиции пикселей xy позиции мыши при каждом обновлении игры (обновление в единстве происходит в разное время, но я могу переместить его в fixedUpdate, чтобы расстояние было одинаковым) ,
- Число точек, создающих форму, не является постоянным, и одна и та же форма может иметь очень разную длину точек.
- Форма совпадения 100% должна быть такого же размера и выполнена в том же направлении, что и сохраненная форма.
-У меня есть база данных, хранящая фигуры в списке.
Проблема заключается в том, что если я создаю любую фигуру, которая близка по расстоянию к краям фигуры, я сравниваю ее, возвращает небольшое значение, аналогичное попытке создать ту же самую фигуру.
- Я попытался использовать динамическую деформацию времени и сделал 2 различных массива для y и для x, а затем я суммировал 2 массива и сделал возврат, чтобы попытаться найти кратчайший путь.
- После этого я попытался использовать динамический деформирующий массив 2 времени для y и для x и выполнить отдельный возврат к каждому из и затем выполнить возврат, чтобы объединить путь 2.
- Позже я попытался использовать динамическую деформацию времени на atan2 (x, y) - из точек относительно начальной точки.
- И попытался использовать динамическое искажение времени при изменении угла между каждой точкой.
Я не буду добавлять все функции, только вызовы к ним, чтобы было легче понять (0 = x, 1 = y):
computeBackwards (sum2Arrays (DtwArray (newShape, oldShape, 0), DtwArray (newShape, oldShape, 1)));
computeBackwards (DtwArray (newShape, oldShape, 0)) + computeBackwards (DtwArray (newShape, oldShape, 1))
computeBackwards (DtwArray (MagicShapeSaver.angleChangeMagic (newShape), MagicShapeSaver.angleChangeMagic (oldShape), 0))
computeBackwards (DtwArray (MagicShapeSaver.angleChangeMagic (newShape), MagicShapeSaver.angleChangeMagic (oldShape), 0))
Если у вас есть представление о том, как я могу решить эту проблему - с dtw или без, это очень сильно меня остановит!