boolInTriangle( Point p, Point q, Point r, Point s )bool pqLeft =ToLeft( p, q, s );bool qrLeft =ToLeft( q, r, s );bool rpLeft =ToLeft( r, p, s );return( pqLeft == qrLeft )&&( qrLeft == rpLeft );
extremePoint( Point S[],int n )//n > 2for(int s =0; s < n; s++) S[s].extreme = TRUE;for(int p =0; p < n; p++)//O(n)for(int q = p +1; q < n; q++)//O(n)for(int r = q +1; r < n; r++)//O(n)for(int s =0; s < n; s++){//O(n)if( s==p || s==q || s==r ||!S[s].extreme )continue;if(InTriangle( S[p], S[q], S[r], S[s]))
S[s].extreme = FALSE;
boolToLeft( Point p, Point q, Point s )returnArea2( p, q, s )>0;
intArea2( Point p, Point q, Point s )return
p.x * q.y - p.y * q.x
+ q.x * s.y - q.y * s.x
+ s.x * p.y - s.y * p.x;