Function LoopRelation.aCrossingTarget
Optionally, a_target() and b_target() can specify an early-exit condition for the loop relation. If any point P is found such that
int aCrossingTarget() const;
A.Contains(P) == a_crossing_target() && B.Contains(P) == b_crossing_target()
then the loop relation is assumed to be the same as if a pair of crossing edges were found. For example, the Contains() relation has
a_crossing_target() == 0 b_crossing_target() == 1
because if A.Contains(P) == 0 (false) and B.Contains(P) == 1 (true) for any point P, then it is equivalent to finding an edge crossing (i.e., since Contains() returns false in both cases).
Loop relations that do not have an early-exit condition of this form should return -1 for both crossing targets.