public static bool IsCCW(PointF pt1, PointF pt2, PointF pt3) { Vector V21 = new Vector(pt2, pt1); Vector v23 = new Vector(pt2, pt3); return V21.CrossProduct(v23) > 0; // sin(angle pt2 pt1 pt3) < 0, 180<angle pt2 pt1 pt3 <360 }
public static double DistancePointLine(PointF pt, PointF lnA, PointF lnB) { Vector v1 = new Vector(lnA, lnB); Vector v2 = new Vector(lnA, pt); v1 /= v1.Magnitude; return Math.Abs(v2.CrossProduct(v1)); }
public static bool IsClockwise(PointF pt1, PointF pt2, PointF pt3) { Vector V21 = new Vector(pt2, pt1); Vector v23 = new Vector(pt2, pt3); return V21.CrossProduct(v23) < 0; // sin(angle pt1 pt2 pt3) > 0, 0<angle pt1 pt2 pt3 <180 }