示例#1
0
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) );
    }
}
示例#2
0
/*---------------------------------------------------------------------
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 ) );
}