[问题已重写以供澄清]
我正在尝试一个排序函数。正在排序的是一个点列表。
排序函数包含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)
下面是一个例子:
这里考虑的两点是在它们之间画线的点。带圆圈的点应该是排序算法中的三个最低点。左边的近点是因为接近两个点中的一个而受到惩罚,但是离另一个点很远。
最佳答案
也许Least Squares方法会有帮助?所以你求距离的平方和。这样一来,左节点会因为离行中的右节点太远而受到惩罚。
另一种选择是将距离取到由两个基本节点构成的直线上的中点。与左边的节点相比,这也更喜欢三个节点。