2016-11-10 60 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

对于这个额外的提示:)顺便说一句:我真的很喜欢你的代码。这很简单,也很容易理解。 –