diff --git a/geometry/geometry.py b/geometry/geometry.py index a0be8eb3befc..aa3f57f78c19 100644 --- a/geometry/geometry.py +++ b/geometry/geometry.py @@ -103,9 +103,12 @@ def area(self) -> float: def perimeter(self) -> float: """ >>> Ellipse(5, 10).perimeter - 47.12388980384689 + 48.44210548835644 """ - return math.pi * (self.major_radius + self.minor_radius) + a, b = self.major_radius, self.minor_radius + # Use Ramanujan's first approximation for ellipse perimeter + # https://en.wikipedia.org/wiki/Perimeter_of_an_ellipse#First_approximation + return math.pi * (3 * (a + b) - ((3 * a + b) * (a + 3 * b)) ** 0.5) class Circle(Ellipse):