算法求助,轨迹相似度
最近在用Java编程,其中一项遇到了一个有关的算法的问题,像各位大虾求教:
1、在二维坐标上,有一组集合点,依次连起来形成一条轨迹,此时给它约定一个宽度
2、有另一组集合点,要求这两条轨迹相似度
相似度约定:第二条轨迹落 在第一条轨迹约定宽度外的总长度 比 落在第一条约定内的总长度 即用来表示相似度
求大神给一下实现这个算法建议
------解决方案--------------------抛转引玉
Y=f1(n)x+f2(n);规定宽度W,上下线为Yup=Y+W和Ydown=Y-W;
这样第二条轨迹的那些采样点,根据f1(n)x+f2(n);算出Y,如果Y>Yup或者Y<Ydown,就是在范围外了,
如果是均匀密集的采样,应该就可以用不在范围内采样点的个数/在范围内采样点的个数来算就差不多了吧。
------解决方案--------------------既然是2D坐标,就以为基准
求取 Dx与Dy,然后计算欧几里德距离不就搞定
当然还可以顺带计算一下角度。
------解决方案--------------------
好吧那在根据斜率角度计算一下。
------解决方案--------------------如果第二条规则是一个圆
------解决方案--------------------
线段有起点,终点还有中间一条直线吗....
所以我的思路可以根据Y=f1(n)x+f2(n); n=1,2,3.....
------解决方案--------------------我建议你在仔细考虑一下你的问题定义。
相似性,是一个关系。一般来说相似关系应该具有对称性。
你这样定义相似性的话,你能给出证明对称性吗?
我还没有仔细研究你的相似性定义,也没有你的相似性关系不具对称性的数学证明。
但我直觉上,感觉你这样定义的相似性不满足对称性。
把一个不满足对称性的关系定义为相似性的话,是没有意义的。
说人话的话就是,如果A和B按你的定义计算出的相似性(度)为90%,而B和A的相似性算出来为35%,
那么你定义的这个相似性,还有什么意义呢?或许根本就不该叫相似性了。
------解决方案--------------------
直观的方法,经常会引向歧途。
我建议你,
第一说清除你的应用场景。
很可能有更好的解决方案。
第二说清初你的输入和输入限制。
是有序点,还是无序点,是否封闭图形,在构造曲线的时候,考不考虑交叉等情况。
想清楚问题,才能定义好问题。定义好问题,才能解决问题。
起手就盲目做的话,恐怕未来得不偿失。