Added a vector between 2 boxes which may be useful for users of the library
parent
3e6cc20cb2
commit
3bf3c97bbb
|
@ -292,6 +292,28 @@ def matrix2str(m):
|
|||
(a, b, c, d, e, f) = m
|
||||
return '[%.2f,%.2f,%.2f,%.2f, (%.2f,%.2f)]' % (a, b, c, d, e, f)
|
||||
|
||||
def vecBetweenBoxes(obj1, obj2):
|
||||
"""A distance function between two TextBoxes.
|
||||
|
||||
Consider the bounding rectangle for obj1 and obj2.
|
||||
Return vector between 2 boxes boundaries if they don't overlap, otherwise returns vector betweeen boxes centers
|
||||
+------+..........+ (x1, y1)
|
||||
| obj1 | :
|
||||
+------+www+------+
|
||||
: | obj2 |
|
||||
(x0, y0) +..........+------+
|
||||
"""
|
||||
(x0, y0) = (min(obj1.x0, obj2.x0), min(obj1.y0, obj2.y0))
|
||||
(x1, y1) = (max(obj1.x1, obj2.x1), max(obj1.y1, obj2.y1))
|
||||
(ow, oh) = (x1-x0, y1-y0)
|
||||
(iw, ih) = (ow-obj1.width-obj2.width, oh-obj1.height-obj2.height)
|
||||
if iw<0 and ih<0:
|
||||
# if one is inside another we compute euclidean distance
|
||||
(xc1, yc1) = ( (obj1.x0+obj1.x1)/2, (obj1.y0+obj1.y1)/2 )
|
||||
(xc2, yc2) = ( (obj2.x0+obj2.x1)/2, (obj2.y0+obj2.y1)/2 )
|
||||
return (xc1-xc2, yc1-yc2)
|
||||
else:
|
||||
return (max(0, iw), max(0, ih))
|
||||
|
||||
## Plane
|
||||
##
|
||||
|
|
Loading…
Reference in New Issue