public Rect GetAABB()
        {
            var ll   = LowerLeft;
            var lr   = LowerRight;
            var ul   = UpperLeft;
            var ur   = UpperRight;
            var minx = TWMath.Min(ll.x, lr.x, ul.x, ur.x);
            var miny = TWMath.Min(ll.y, lr.y, ul.y, ur.y);
            var maxx = TWMath.Max(ll.x, lr.x, ul.x, ur.x);
            var maxy = TWMath.Max(ll.y, lr.y, ul.y, ur.y);

            return(new Rect(minx, miny, maxx - minx, maxy - miny));
        }
        private static bool SeparatesOnAxis(Vector2 axis, float aMin, float aMax, Vector2 b1, Vector2 b2, Vector2 b3, Vector2 b4)
        {
            var dotb1 = Vector2.Dot(axis, b1);
            var dotb2 = Vector2.Dot(axis, b2);
            var dotb3 = Vector2.Dot(axis, b3);
            var dotb4 = Vector2.Dot(axis, b4);

            var bMin = TWMath.Min(dotb1, dotb2, dotb3, dotb4);
            var bMax = TWMath.Max(dotb1, dotb2, dotb3, dotb4);


            if (aMin > bMax || bMin > aMax)
            {
                return(true);
            }
            return(false);
        }