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); }