def merge_rectangles_into_obstacles(self, centers, widths, heights, epsilon):
"""Merges rectangles defined by centers, widths, heights. Two rectangles
with distance < epsilon are considered part of the same object."""
G = nx.Graph()
obstacles = {i: Obstacle(centers[i, :], widths[i, 0], heights[i, 0]) for i in range(len(centers))}
G.add_nodes_from(obstacles.keys())
for i in obstacles:
for j in obstacles:
if i != j and obstacles[i].distance_to_obstacle(obstacles[j]) < epsilon:
G.add_edge(i,j)
merged_obstacles = {}
conn_components = nx.connected_components(G)
for cc in conn_components:
cc = list(cc)
new_obs = obstacles[cc[0]]
for i in range(1, len(cc)):
new_obs.merge(obstacles[cc[i]])
merged_obstacles[cc[0]] = new_obs
return merged_obstacles
评论列表
文章目录