internal static double Angle(D2 a, D2 b) { var p = new D2(-b.Y, b.X); var angle = Math.Atan2(D2.Dot(a, p), D2.Dot(a, b)); return((angle < 0) ? 2.0 * Math.PI + angle : angle); }
internal static bool InsideSquare(D2[] square, D2 p) { var ap = p - square[0]; var ab = square[1] - square[0]; var ad = square[3] - square[0]; var ap_dot_ab = D2.Dot(ap, ab); var ap_dot_ad = D2.Dot(ap, ad); return ((0 < ap_dot_ab) && (0 < ap_dot_ad) && (ap_dot_ab < D2.Dot(ab, ab)) && (ap_dot_ad < D2.Dot(ad, ad))); }