2016-11-10 87 views
1

我有一組矩形,我需要計算它們之間的移動距離。我已經嘗試過實施它,但是代碼被炸燬並且效果不佳。矩形間的移動距離

也許有人可以幫助我用一些聰明(和高效)的公式,可以用來計算兩個矩形之間的距離?

實例:

enter image description here

AB之間的距離是線路1的長度。 AC之間的距離是行2的長度。等等。

我使用python來實現一切。如果已經存在一個函數(例如在scipy中)並且有人知道它,這也會很棒。

謝謝

+0

。已經有一個答案的問題: http://stackoverflow.com/questions/8224470/calculating-manhattan-distance#8224516 這可能是Java,但它很容易變成蟒蛇 –

+0

我找到了蟒蛇一個http://stackoverflow.com/questions/35363811/manhattan-distance-python –

+0

這不會直接幫助,因爲你只得到節點之間的距離。不幸的是,如果一個矩形不在另一個矩形的「陰影」中,兩個矩形之間的最小距離將只是最近角點之間的距離。但是,如果情況並非如此,則需要投影唯一可能的邊緣,並獲得可能的兩個中間點以確定距離。順便說一句,在這種情況下,距離將是歐幾里得距離 – Quickbeam2k1

回答

2

我建議,你用矩形和矩形的寬度來計算距離的中央點工作。您主要必須弄清矩形的哪些角(邊)用於計算。其他一切都很簡單。一個簡單的例子:

class Rect: 
    def __init__(self,cpt,w,h): 
     self.x = cpt[0] 
     self.y = cpt[1] 
     self.w = w 
     self.h = h 

    def dist(self,other): 
     #overlaps in x or y: 
     if abs(self.x - other.x) <= (self.w + other.w): 
      dx = 0; 
     else: 
      dx = abs(self.x - other.x) - (self.w + other.w) 
     # 
     if abs(self.y - other.y) <= (self.h + other.h): 
      dy = 0; 
     else: 
      dy = abs(self.y - other.y) - (self.h + other.h) 
     return dx + dy 

#example: 
A = Rect((0,0),2,1) 
B = Rect((4,5),1,2) 
C = Rect((-1,-5),1,1) 

print(A.dist(C)) 
print(A.dist(B)) 
print(B.dist(C)) 
+0

我玩過你的代碼,它似乎工作:)謝謝! –

+1

你也可以很容易地獲得矩形之間的「真實/對角線」距離,只需將return語句更改爲:'return sqrt(dx ** 2 + dy ** 2)'並使用數學或numpy模塊作爲根目錄 – LynxLike

+0

對於這個額外的提示:)順便說一句:我真的很喜歡你的代碼。這很簡單,也很容易理解。 –