sideOf
Returns where p is as seen from s towards e. 1/0/-1 Leftrightarrow left/on line/right. If the optional argument eps is given 0 is returned if p is within distance eps from the line. P is supposed to be Point<T> where T is e.g. double or long long. It uses products in intermediate steps so watch out for overflow if using int or long long.
9 lines tested
Usage: bool left = sideOf(p1,p2,q)==1;
Needs: "Point.h"
content/geometry/sideOf.h — Ulf Lundstrom
template<class P>
int sideOf(P s, P e, P p) { return sgn(s.cross(e, p)); }
template<class P>
int sideOf(P s, P e, P p, double eps) {
auto a = (e-s).cross(p-s);
double l = (e-s).dist()*eps;
return (a > l) - (a < -l);
}