Perimeter of an Ellipse

The perimeter of a circle is simple. 2 Pi radius, or Tau radius for the Pi non-believers. An ellipse is much harder, strangely enough. We can get approximations or use infinite series to get close though. I want to make my own approximation.

Much like how a circle can be described in terms of sine and cosine functions, an ellipse can also be described in such functions by using parametric equations. It is a sort of periodic motion to look at the change in radius over the change in angle for an ellipse. For a circle the radius is constant, but for an ellipse it rhythmically transitions between two values: the major axis and the minor axis. A sinusoidal function could model that behavior pretty well. Here's what we're looking for.

After going halfway around the ellipse starting from the major axis a (pi radians), we should get back to the radius of a. Looks good! Time to model this curve. The mid-point of the curve is at (a+b)/2 so that should be the y-offset value. As for the sine's amplitude, it is the difference between a and b, divided by 2. Something like this should work:

If you are confused by the arclength formula I have made another post about this stuff: "Angles! Circles! Integrals!" Anyway, time to plug this into an integral. I'm just going to integrate from 0 radians to pi / 2 radians, which is a fourth of the total perimeter of the ellipse. I can then just multiply the result by 4 to get the full perimeter, taking advantage of the ellipse's symmetry.

Uhmm.. wait. The sinusoidal component vanished. This result seems like a poor estimation. Let me check my python estimator program real quick.

        Ratio 1:1 -> 0.0
        Ratio 2:1 -> 2.7214911384786356
        Ratio 3:1 -> 5.974777299140367
        Ratio 4:1 -> 8.444911665224181
        Ratio 5:1 -> 10.283122503947945
        Ratio 10:1 -> 14.966194030716592
        Ratio 100:1 -> 20.696560827945515
        Ratio 1000:1 -> 21.381950220513023
        Ratio 10000:1 -> 21.45233364395672
    

This log output shows different ratios of major axis to minor axis for ellipses. A ratio of 1:1 is a circle, 2:1 means the major axis is twice as large as the minor axis, and so on. The number on the far right is the percentage of error from the actual perimeter of the ellipse. Looks like it quickly loses accuracy up to a maximum of about 21.5%. Well that won't do.

Oh wait. I know why the sine part vanished. Take a look at the range I integrated the curve over.

The black line is the full equation of the integration. But really it's just a regular cosine curve offset by a constant amount in the y direction. That constant offset is represented by the (a+b) * pi result we got. It turns out that offset is the only contributing factor in the sum. Look at how the black line has a positive and a negative sum if we set our x = 0 on the red line. They perfectly cancel each other out. The blue colored area accounts for all of the area under the black line curve here, and if you multiply that sum by 4 you end up with our (a+b)*pi we got.

Well I would very much like the whole point of my approximation to not be excluded during integration. I will need a sinusoidal function that won't cancel itself out in the end. How about this instead?

This is different than the first curve. Instead I will start at b at the sine's inflection point instead of the minimum, and the apex of the curve will be at a. This summation will definitely not cancel out this time. What will this equation look like?

There is a slight problem where after pi the value tends to negative a. This is fine, as we will only integrate the first quarter of this curve's period before negative values become an issue. Time to evaluate the integral!

Looks interesting. Time to check out its accuracy.

        Ratio 1:1 -> 0.0
        Ratio 2:1 -> 6.138620686133895
        Ratio 3:1 -> 6.87092722306222
        Ratio 4:1 -> 6.564970727644871
        Ratio 5:1 -> 6.0596766707731415
        Ratio 10:1 -> 4.043931957584005
        Ratio 100:1 -> 0.5431889335909049
        Ratio 1000:1 -> 0.05668970914099061
        Ratio 10000:1 -> 0.005702914662623921
    

Wow, that is pretty good. Not only is it completely accurate in the circle case, but it also tends to perfect accuracy in the infinitely stretched ellipse case. If you squished the ellipse into just a line, no minor axis, this equation would also perfectly estimate the length. If b is 0, this equation gives 4*a which is correct. In the circle case where a = b the equation is 2*pi*a which is also correct!

How do other approximations compare? I'm going to find some and test that out. Oh hey, here is a cool website. Let's test some of these out.

Mathisfun Approximation 1

        Ratio 1:1 -> 0.0
        Ratio 2:1 -> 2.5405517957602495
        Ratio 3:1 -> 5.123394779339265
        Ratio 4:1 -> 6.770663161677988
        Ratio 5:1 -> 7.826267362178979
        Ratio 10:1 -> 9.868859763728075
        Ratio 100:1 -> 11.047135326462605
        Ratio 1000:1 -> 11.071696140675124
        Ratio 10000:1 -> 11.072068402048957
    

It has better accuracy up until 4:1 ratio, then it gets worse.

Mathisfun Approximation 2

        Ratio 1:1 -> 0.0
        Ratio 2:1 -> 0.0002799506770339681
        Ratio 3:1 -> 0.003392719357572033
        Ratio 4:1 -> 0.010710699140453544
        Ratio 5:1 -> 0.02113408342030678
        Ratio 10:1 -> 0.08419496372671514
        Ratio 100:1 -> 0.34202806381224116
        Ratio 1000:1 -> 0.40687616803887355
        Ratio 10000:1 -> 0.41461766387098115
    

Wow, that is a more complicated formula, but it is much better for most practical cases. However, over strectched ellipses of around 100:1 ratio my estimation wins. Although not really practical, the formula I came up with is the only one so far that gets more accurate the more stretched the ellipse gets.

Mathisfun Approximation 3

        Ratio 1:1 -> 0.0
        Ratio 2:1 -> 4.5596464458697937e-08
        Ratio 3:1 -> 3.297658506027773e-06
        Ratio 4:1 -> 2.4992311356206883e-05
        Ratio 5:1 -> 8.514084598049154e-05
        Ratio 10:1 -> 0.0011557672353010313
        Ratio 100:1 -> 0.02389769534904843
        Ratio 1000:1 -> 0.03784219942767823
        Ratio 10000:1 -> 0.039977305521903164
    

This one blows all other estimations out of the water. It only starts to get more inaccurate than mine around a ratio of 2000:1

I guess if I need to crudely estimate an ellipse's perimeter I could memorize 2*pi*b + 4(a-b) relatively easily.