public static bool IsRectangle(List <Vec2d> poly, double epsilon)
        {
            bool result = poly.Count == 4;

            if (result)
            {
                // Check angles
                for (int i = 0; result && i < poly.Count - 1; ++i)
                {
                    int   j  = i + 1;
                    int   k  = (i + 2) % poly.Count;
                    Vec2d v1 = poly[j] - poly[i];
                    Vec2d v2 = poly[k] - poly[j];
                    v1.Normalize();
                    v2.Normalize();
                    double angle = Vec2d.AngleBetweenVectors(v1, v2);
                    while (angle < -Math.PI)
                    {
                        angle += 2.0 * Math.PI;
                    }
                    while (angle >= Math.PI)
                    {
                        angle -= 2.0 * Math.PI;
                    }
                    angle  = Math.Abs(angle);
                    result = Math.Abs(angle - 0.5 * Math.PI) < epsilon;
                }
            }
            return(result);
        }