2016-11-10 7 views
1

私は長方形のセットを持っており、それらの間にマンハッタンの距離を計算する必要があります。私はすでに実装しようとしましたが、コードが爆発し、うまく動作しませんでした。四角形の間の距離

誰かが、2つの長方形間の距離を計算するために使用できるいくつかのスマートな(そして効率的な)公式を助けてくれるかもしれませんか?

例:

enter image description here

ABとの間の距離がライン1の長さです。 ACの間の距離は、2の長さです。

私はすべてを実装するためにpythonを使用します。関数がすでに存在していて(例えばscipyに)、誰かがそれを知っていれば、これも素晴らしいでしょう。

あなたは距離を計算する四角形と長方形の幅の中心点で動作する、あなたは

+0

答えと質問がすでにあります: http://stackoverflow.com/questions/8224470/calculating-manhattan-distance#8224516 これは、Javaかもしれないが、それは簡単に変更しますpython –

+0

私はpython oneを見つけます。http://stackoverflow.com/questions/35363811/manhattan-distance-python –

+0

これは、ノード間の距離だけを取得するため、直接は役に立ちません。残念ながら、2つの矩形間の最小距離は、1つの矩形が別の矩形の「影」内にない場合にのみ、最も近いコーナー点の間の距離になります。しかし、これが当てはまらない場合は、唯一可能なエッジで投影し、その距離を決定するために潜在的に2つの中間点を取得する必要があります。 Btw、その場合、距離はユークリッド距離になります – 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

ありがとうこの追加のヒントのため:) Btw:私はあなたのコードが本当に好きです。それは非常に簡単で理解しやすいです。 –