title: 2d geometry push algorithm
body: <p>I have a rectangle board and in it, there are some disjoint 2D shapes such as rectangles, polygons, and more complex geometries, such as simple shapes with arc/line edges.
  Usually they are compact, but for some shapes, we may be able to rotate or translate them. 
  If we move one geometry according a given direction, the adjacent geometry should also be moved or rotated. It looks like the first geometry pushes the second geometry. The second geometry might push the other two geometries. Finally, we may achieve another stable state, or there is no room to push.</p>
  
  <p>Is there any existing investigation on this?
  Let's first focus on simple polygons, convex and non-convex.
  Push might be any direction.
  <a href="https://i.stack.imgur.com/YxlE6.png" rel="nofollow noreferrer">example image</a></p>
  
  <p>I'm doing some investigation but could not find existing papers about this topic.
  Can we simulate it through mechanics or dynamics? Or pure geometry algorithm?</p>
  
  <p>Just some keywords for paper search is also very useful.</p>
  
  <p>It's similar with EDA's auto push concept. User can move one element (pin/wire) of a circuit, then the software automatically pushes adjacent elements so that the topology is kept and meet design rules.</p>
  
  <p>I think I can use some concepts in mechanics, to compute moving direction at least:
  If the connected part of polygon A and polygon B is a point, then pushing A by one direction then generates a force to B along the normal direction. But the force may not generate a move. We need loop all the parts or reach the boundary to check how much it can move.
  Let's ignore rotation first.</p>