比较两个不同时间线中不同时间线中的点(x,y)组成的2个形状

时间:2019-03-31 12:44:00

标签: c# unity3d compare dtw

我正在统一制作游戏(c#)。 在游戏中,我需要将玩家制作的形状与我存储在数据库中的形状进行比较,并确定该形状是否与它们中的任何一个相似,如果是,则将玩家制作的形状与所存储的形状有多接近-将有20个最终有-50个形状。

-Shape是一个列表,用于存储游戏每次更新中鼠标位置的像素位置xy(单位更新发生在不同的时间-但我可以将其移动到fixedUpdate,因此时间距离相同) 。 -创建形状的点数不是恒定的,并且相同形状的点长度可能会非常不同。 -100%匹配的形状必须与存储的形状相同,并且方向相同。 -我有一个数据库,将形状存储在列表中。

问题在于,如果我将任何形状与形状边缘相距很近的im进行比较,则返回的值与尝试创建相同形状的值相同。

  1. 我尝试使用动态时间扭曲,并为y和x制作了2个差分数组,然后求和了2个数组,并进行了回溯以尝试找到最短路径。
  2. 然后,我尝试对y和x使用动态时间规整2差分数组,并对每个和进行单独的回溯,并进行回溯以结合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,它都会使我非常震惊!

0 个答案:

没有答案