class Fence { public Point p1; public Point p2; Fence(Point a, Point b) { p1 = a; p2 = b; } public static boolean cross(Fence f, Point a, Point b) { return( (CCW(f.p1,f.p2,a)*CCW(f.p1,f.p2,b)<=0) && (CCW(a,b,f.p1)*CCW(a,b,f.p2)<=0)); } static int CCW(Point p0, Point p1, Point p2) { double dx1, dx2, dy1, dy2; dx1 = p1.x - p0.x; dy1 = p1.y - p0.y; dx2 = p2.x - p0.x; dy2 = p2.y - p0.y; if (dx1*dy2 > dy1*dx2) return 1; if (dx1*dy2 < dy1*dx2) return -1; if ((dx1*dx2 < 0) || (dy1*dy2 < 0)) return -1; if ((dx1*dx1+dy1*dy1) < (dx2*dx2+dy2*dy2)) return 1; return 0; } }