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)

下面是一个例子:

在此处输入图像描述

这里考虑的两点是在它们之间画线的点。圈出的点应该是排序算法中的三个最低点。左边的近点因靠近两点之一但远离另一点而受到处罚。

4

2 回答 2

2

好吧,使用平均值似乎是一种直观的方法(顺便说一下,这与使用总和相同)。您可以做的另一件事是使用“加权”平均值。例如,如果a是较短的距离,您可以使用(2*a + b) / 3, 例如(或通常(m*a + b*n) / (m + n)where m > n)给它更高的优先级。

于 2012-11-20T17:29:35.757 回答
2

也许最小二乘法会有所帮助?所以你对距离的平方求和。这样,左节点将因离行中的右节点太远而受到惩罚。

另一种选择是取两个基节点所形成的直线中点的距离。这也将更喜欢三个节点而不是左侧的一个。

于 2012-11-20T17:36:17.243 回答