bool CBasePoly::InsideDiagonal( uint32 a, uint32 b ) { uint32 a_plus_1, a_minus_1; a_plus_1 = m_Indices.NextI( a ); a_minus_1 = m_Indices.PrevI( a ); if( LeftOn(a_minus_1, a, a_plus_1) ) { return Left(a, b, a_minus_1) && Left(b, a, a_plus_1); } else { return !( LeftOn(a, b, a_plus_1) && LeftOn(b, a, a_minus_1) ); } }
/*--------------------------------------------------------------------- Returns TRUE iff the diagonal (a,b) is strictly internal to the polygon in the neighborhood of the a endpoint. ---------------------------------------------------------------------*/ bool InCone( tVertex a, tVertex b ) { tVertex a0,a1; /* a0,a,a1 are consecutive vertices. */ a1 = a->next; a0 = a->prev; /* If a is a convex vertex ... */ if( LeftOn( a->v, a1->v, a0->v ) ) return Left( a->v, b->v, a0->v ) && Left( b->v, a->v, a1->v ); /* Else a is reflex: */ return !( LeftOn( a->v, b->v, a1->v ) && LeftOn( b->v, a->v, a0->v ) ); }