in mujoco_worldgen/util/placement.py [0:0]
def _get_edge_constraints(sizes, width, height, placement_margin):
# a xy >= b
a_edge = []
b_edge = []
for idx, s in enumerate(sizes):
# x_idx >= 0
a = np.zeros(2 * len(sizes))
a[idx] = 1.0
a_edge.append(a)
b_edge.append(placement_margin)
# x_idx <= width - s_idx[0]
# -x_idx >= s_idx[0] - width
a = np.zeros(2 * len(sizes))
a[idx] = -1.0
a_edge.append(a)
b_edge.append(s[0] - width + placement_margin)
# y_idx >= 0
a = np.zeros(2 * len(sizes))
a[idx + len(sizes)] = 1.0
a_edge.append(a)
b_edge.append(placement_margin)
# y_idx <= height - s_idx[1]
# -y_idx >= s_idx[0] - height
a = np.zeros(2 * len(sizes))
a[idx + len(sizes)] = -1.0
a_edge.append(a)
b_edge.append(s[1] - height + placement_margin)
a_edge = np.stack(a_edge)
b_edge = np.array(b_edge)
return a_edge, b_edge