2009-07-28 87 views
1

有没有一种算法(最好在C#实现中),可以让我比较两条线的相似程度?在我的情况下,我有一条参考线,并且我有很多次要线,我需要从这么多次要线中选择,这是最接近参考线的线。公制比较如何相似的两个二维线性线

编辑:它是一条2D线,有起点和终点。当你比较相似之处时,你要考虑到全面的线条。该线的方向(即,是从左到右还是反之亦然)并不重要。是的,这有多么接近彼此

我知道这是一种主观的(相似,不是问题)做了,不过,我相信还有谁在做工作的人这个。

+0

在多少维度? – Nosredna 2009-07-28 01:34:30

+0

你能否提供更多的上下文?线条是否有起点和终点,还是他们通过一个点向量?一条线接近参考线还是长度/方向相同更重要?这个测试用于什么? – 2009-07-28 01:35:05

+1

恐怕你必须是决定“相似”意味着什么的人。这与他们彼此接近有多大关系?还是仅仅是一个方向问题? – Nosredna 2009-07-28 01:36:52

回答

0

如果您在图形意义上谈论线条,那么我会考虑线条长度和角度等组合。

根据您的情况,您可以进行优化,例如使用长度的平方(保存平方根)和dy/dx作为角度(保存trig函数,但要注意分频 - 零的情况)。

3

明显的指标包括斜率,长度和中点之间的距离。你可以计算出这些,然后找到你喜欢的权重。

如果您想将它们全部包装成一件,请尝试端点之间的距离总和。

你将不得不尝试几件事情,看看哪些案件会刺激你,然后找出原因。

0

行(并在一般超平面)坐在一个对象调用Grassmanian;例如平面上的线坐落在与二维投影空间同构的Gr(1,3)上,而你的是最简单的非平凡的:Gr(2,4)。它是一个紧凑的度量空间,它带有一个标准度量标准(来自plucker嵌入 - 参见上面的链接)。然而,这个度量的计算有点贵,因此您可能需要考虑一个近似值(就像您会考虑使用点积而不是二维角度 - 它适用于小角度)

更详细(基于链接维基百科文章中定义的指标):

对于每一行l取其上的两个点(x1,y1,z1)和(x2,y2,z2)。设A是列(1,x1,y1,z1)^ t和(1,x2,y2,z2)^ t的4乘2矩阵。将P定义为4乘4矩阵 A(A^tA)^( - 1)A^t。那么P只依赖于l而不依赖于两点的选择。

您想要的度量是两条线对应的矩阵之间的差异的最大特征值的绝对值。