in mae_envs/modules/walls.py [0:0]
def connect_walls(wall1, wall2, min_dist_between, random_state=np.random.RandomState()):
'''
Draw a random new wall connecting wall1 and wall2. Return None if
the drawn wall was closer than min_dist_between to another wall
or the wall wasn't valid.
NOTE: This DOES NOT check if the created wall overlaps with any existing walls, that
should be done outside of this function
Args:
wall1, wall2 (Wall): walls to draw a new wall between
min_dist_between (int): closest another parallel wall can be to the new wall in grid cells.
random_state (np.random.RandomState): random state to use for sampling
'''
if wall1.is_vertical != wall2.is_vertical:
return None
length = random_state.randint(1, wall1.length)
if wall1.is_vertical:
pt1 = [wall1.pt1[0], wall1.pt1[1] + length]
pt2 = [wall2.pt1[0], wall1.pt1[1] + length]
else:
pt1 = [wall1.pt1[0] + length, wall1.pt1[1]]
pt2 = [wall1.pt1[0] + length, wall2.pt1[1]]
# Make sure that the new wall actually touches both walls
# and there is no wall close to this new wall
wall1_right_of_wall2 = np.any(np.array(pt2) - np.array(pt1) < 0)
if wall1_right_of_wall2:
dists = np.array(pt1)[None, :] - np.array(wall1.left_edges)
else:
dists = np.array(pt1)[None, :] - np.array(wall1.right_edges)
min_dist = np.linalg.norm(dists, axis=1).min()
if wall2.is_touching(pt2) and min_dist > min_dist_between:
return Wall(pt1, pt2)
return None