2012-11-20 54 views
2

[问题已被重写为澄清]基于距离的点列表的排序功能

我想要拿出一个排序功能。什么是排序是一个点列表。

排序功能需要3分。一个来自要排序的点的列表,另外两个用于比较。目标是确定要排序的点与其他两点之间的相对欧式距离。当点直接位于两点之间时,应该给出函数的最低值。该函数应该利用两点之间的欧氏距离。

到目前为止,似乎公式应该是距离的一些平方,或者在两个给定点之间创建一个点,并使用到该点的欧氏距离。下面我已经包含了两个可能的功能。

p is the point to be sorted 
p1,p2 are the given points 

def f(p,p1,p2): #Midpoint distance 
    midPoint = midpoint(p1,p2) 
    return distance(p,midPoint) 

def f(p,p1,p2): #Sum of squares 
    return distance(p,p1) ** 2 + distance(p,p2) ** 2 

def distance(pointA,pointB): #Psudocode 
    dx = pointA.x - pointB.x 
    dy = pointA.y - pointB.y 
    return sqrt(dx ** 2 + dy ** 2) 

下面是一个例子:

enter image description here

正在这里考虑的两点都与他们之间绘制的线条的人。圆圈点应该是排序算法中的三个最低点。左边的接近点受到接近两点之一的处罚,但远离另一点。

+1

可以给更多的上下文吗?因为我真的不明白你希望那三个是最接近的逻辑。我会和你完全相反。我定义了一个距离'h',然后使用它我会说“哦,他们确实是最接近的”或者“他们不是”。反过来,如果没有更多关于你想拥有哪个特征的信息,那真的很难。 – Bakuriu

+0

这听起来像你正在与矩阵,在这种情况下[这可能是你在找什么](http://stackoverflow.com/questions/1871536/euclidean-distance-between-points-in-two-不同-numpy的阵列 - 不内)。 – jathanism

+1

请解释*为什么*你认为这三点是最接近的。这可能有助于澄清您的问题陈述,目前有点模糊。 – NPE

回答

2

也许Least Squares方法会有帮助吗?所以你总结了距离的平方。通过这种方式,左边的节点会因为离线的右边节点太远而受到惩罚。

另一种选择是将距离设置为由两个基节点所形成的线上的中点。这也会选择左边的三个节点。

+0

两者都可能是有用的,因为“最接近”可能存在于两个点之间。很难说现在哪个更好。可能最终都会尝试两种方法,看看会产生更好的结果。 – Nuclearman

2

那么使用平均值似乎是直观的方式来做到这一点(顺便说一句,这将与使用总和相同)。你可以做的另一件事是使用“加权”平均值。例如,如果a是较短距离,则可以通过使用(2*a + b)/3(例如,通常(m*a + b*n)/(m + n),其中m > n)给予它更高的优先级。