2012-11-20 43 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)給予它更高的優先級。