FindValidAngleRange:

--------------------------------------------------------------------------
   Find valid range of rotation angles that satisfy separation constraints

   If we rotate "u1" about the "axis" vector by "phi", it becomes "u1R".

   The constraint is to keep the rotated "u1R" vector away from the "u2"
   vector by a specified angle "minSep":
     acos( Dot( u1R, u2 ) ) >= minSep

   The "angles" output is the range of "phi" angles that satisfy the
   constraint. If empty, then no rotation will satisfy the constraint.

   If this function is called with u1, u2, minSep having multiple columns,
   then it calls itself recursively, merging the new angle range output
   with the previous merge each time.
   
   Type FindValidAngleRange for a demo.

   Since version 11.
--------------------------------------------------------------------------
   Form:
   angles = FindValidAngleRange( axis, u1, u2, minSep );
--------------------------------------------------------------------------

   ------
   Inputs
   ------
   axis       (3,1)    Axis of rotation
   u1         (3,N)    Vector u1. Constraint is:
                         acos( Dot(u1,u2) ) >= minSep
   u2         (3,N)    Vector u2.
   minSep     (1,N)    Keep angle between u1 and u2 greater than minSep.

   -------
   Outputs
   -------
   angles     (1,2)    Range of valid rotation angles. If empty, the
                       constraint cannot be satisfied for any rotation.

--------------------------------------------------------------------------

Children:

Common: Graphics/Plot2D
Math: Geometry/InsideAngleRange
Math: Geometry/MergeAngleRange
Math: Linear/Cross
Math: Linear/Unit
Math: Trigonometry/SolveLinearSinCos