Assembly planning with translations

The goal is to design a program to compute the disassembly sequence of a product A. Each operation in the sequence applies to a subassembly S (initially S = A) and partitions S into two subassemblies S1 and S2. The subassemblies are divided into smaller subassemblies by subsequent operations. The motion executed at each operation is an extended on-step translation along some direction d. We assume that each part of A is a simple polygon.

The project is organized into 4 steps:
  1. Compute the range of non-blocking directions for each pair of parts in A: For an ordered pair (P1,P2) of parts of A, a direction is said to be non-blocking if translating P1 along d to infinity does not lead the interior of $P1 to overlap the interior of P2.
  2. Compute the non-directional blocking graph (NDBG) of A: Represent the sspace of all possible translations by the unit circle S1. Partition this circle into points and open arcs such that in each arc all directions are blocking or non-blocking for the same pairs of parts. For each arc and point, compute the graph representing the blocking relations between parts.
  3. Exploit the NDBG to find all possible partitioning of A: This step is equivalent to finding the strong connected components of the NDBG.
  4. Exploit the NDBG to generate all possible assembly sequences of A

Related paper: A General Framework for Assembly Planning: The Motion Space Approach, by Dan Halperin, Jean-Claude Latombe, and Randall H. Wilson.