The following lists and evaluates some of the approximations that can be used to calculate the circumference of an ellipse. To some, perhaps surprising that there is not a simple closed solution, as there is for the special case, a circle. All the expressions below reduce to the equation of a circle when a=b. Most (not all) perform more poorly as the ratio b/a increases. Anonymous
Ramanujan, first approximation
Ramanujan, second approximation
This is one of the more accurate approximation presented here although it degrades for large b/a ratios. Hudson
This does not use any computationally expensive functions. Holder mean
Similarly for low eccentricities (Muir, 1883). David Cantrell
There is an exact series expansion but it converges rather slowly and it has numerical issues due to the need for large factorials.
The following can be derived directly from the line integral of the equation of an ellipse.
Various approximations are provided by Necat Tasdelen, they consist of improved estimates of "s" for what is referred to as the Holder method above. Three estimates of "s" are provided in the examples below, a constant value (same as Holder), a linear, and a power fit estimate. The later is one of the more accurate approximations presented here for extreme eccentricities. For the further details the reader is directed to the documents above. Ellipse Perimeter Estimation by Necat Tasdelen: Necat.pdf and the equivalent elliptic integrals: eliptic.pdfBessel
Charles Karney contributed this rapidly converging series attributed to Bessel (1825). ![]() Code contributions Contribution by Bill Gran: gran.png and a nifty little Excel Calculator: GRAN_Method_Calculator.xlsx.zip. Appears in ANC-5 Strength of Metal Aircraft Elements March 1955 Revised Edition Section 1.535, pages 11-13. GRAN Formula for the Complete Elliptic Integral of the Second Kind. Adjustments to Ramanujan's formula and tables Ramanujan.xls.zip by Hassan Abed, as well as modifications to Hudson formula and correction, and his own approximations AbedsFormulas.xls.zip AGM algorithm contributed by Charles Karney and based upon Carlson, B. C. (1995). "Computation of real or complex elliptic integrals". Numerical Algorithms 10. This algorithm converses quadratically, that is, the number of correct digits doubles on each iteration so the fastest converging series of those presented here. Versions: Maxima, Python and C. The series was first proposed by James Ivory, A new series for the rectification of the ellipsis, Trans. Roy. Soc. Edinburgh 4, 177-190 (1798).
This simple C code evaluates the various estimates given above. Some example output is given below. All methods give exact estimates for a circle, for example, a unit circle. This is hardly unexpected since they reduce to the equation of a circle for a=b. All error are given as relative error (estimate - actual) / actual. In the following the "ground truth" is taken to be the AGM algorithm. Example: a=1, b=1
e : 0.0000000000 h : 0.0000000000 b/a: 1.0000000000 Numerical : 6.27672765822760 Error: 0.001028 ( 10 segments) Numerical : 6.28312071096907 Error: 0.010 x10(-3) ( 100 segments) Numerical : 6.28318466121547 Error: 0.103 x10(-6) ( 1000 segments) Numerical : 6.28318530072077 Error: 0.001 x10(-6) ( 10000 segments) Numerical : 6.28318530710706 Error: 0.012 x10(-9) ( 100000 segments) Numerical : 6.28318530717921 Error: 0.059 x10(-12) ( 1000000 segments) Numerical : 6.28318530717957 Error: 0.002 x10(-12) ( 10000000 segments) Numerical : 6.28318530717915 Error: 0.069 x10(-12) (100000000 segments) Integral : 6.28318530717959 Error: 0.000 x10(-12) ( 10 segments) Integral : 6.28318530717958 Error: 0.001 x10(-12) ( 100 segments) Integral : 6.28318530717947 Error: 0.018 x10(-12) ( 1000 segments) Integral : 6.28318530718043 Error: 0.134 x10(-12) ( 10000 segments) Integral : 6.28318530717586 Error: 0.593 x10(-12) ( 100000 segments) Integral : 6.28318530715542 Error: 0.004 x10(-9) ( 1000000 segments) Integral : 6.28318530604334 Error: 0.181 x10(-9) ( 10000000 segments) Integral : 6.28318532160340 Error: 0.002 x10(-6) (100000000 segments) Circle circumference : 6.28318530717959 Error: 0.000 x10(-12) Anonymous : 6.28318530717959 Error: 0.000 x10(-12) Hudson : 6.28318530717959 Error: 0.000 x10(-12) Ramanujan 1 : 6.28318530717959 Error: 0.000 x10(-12) Ramanujan 11 : 6.28318530717959 Error: 0.000 x10(-12) Holder mean : 6.28318530717959 Error: 0.000 x10(-12) (s: 1.534928535661375) Cantrell : 6.28318530717959 Error: 0.000 x10(-12) (s: 0.829896183162743) Exact : 6.28318530717959 Error: 0.000 x10(-12) ( 10 terms) Exact : 6.28318530717959 Error: 0.000 x10(-12) ( 50 terms) Exact : 6.28318530717959 Error: 0.000 x10(-12) ( 250 terms) Exact : 6.28318530717959 Error: 0.000 x10(-12) ( 1250 terms) Necat (constant s) : 6.28318530717959 Error: 0.000 x10(-12) (s: 1.534928535661375) Necat (linear s) : 6.28318530717958 Error: 0.001 x10(-12) (s: 1.534928535661380) Necat (power s) : 6.28318530717958 Error: 0.001 x10(-12) (s: 1.534928535661380) Bessel : 6.28318530717959 Error: 0.000 x10(-12) ( 10 terms) Bessel : 6.28318530717959 Error: 0.000 x10(-12) ( 100 terms) Bessel : 6.28318530717959 Error: 0.000 x10(-12) ( 1000 terms)Example: a=1, b=2 (Modest eccentricity)
e : 0.8660254038 h : 0.1111111111 b/a: 0.5000000000 Numerical : 9.67849075560978 Error: 0.001028 ( 10 segments) Numerical : 9.68834861548905 Error: 0.010 x10(-3) ( 100 segments) Numerical : 9.68844722449405 Error: 0.103 x10(-6) ( 1000 segments) Numerical : 9.68844821058716 Error: 0.001 x10(-6) ( 10000 segments) Numerical : 9.68844822044810 Error: 0.010 x10(-9) ( 100000 segments) Numerical : 9.68844822054622 Error: 0.150 x10(-12) ( 1000000 segments) Numerical : 9.68844822054806 Error: 0.040 x10(-12) ( 10000000 segments) Numerical : 9.68844822054901 Error: 0.138 x10(-12) (100000000 segments) Integral : 9.68844822056413 Error: 0.002 x10(-9) ( 10 segments) Integral : 9.68844822054768 Error: 0.000 x10(-12) ( 100 segments) Integral : 9.68844822054768 Error: 0.000 x10(-12) ( 1000 segments) Integral : 9.68844822054761 Error: 0.006 x10(-12) ( 10000 segments) Integral : 9.68844822054766 Error: 0.002 x10(-12) ( 100000 segments) Integral : 9.68844822054803 Error: 0.036 x10(-12) ( 1000000 segments) Integral : 9.68844822054681 Error: 0.089 x10(-12) ( 10000000 segments) Integral : 9.68844822054597 Error: 0.176 x10(-12) (100000000 segments) Anonymous : 9.68303887270669 Error: 0.558 x10(-3) Hudson : 9.68844734419566 Error: 0.090 x10(-6) Ramanujan 1 : 9.68842109767129 Error: 0.003 x10(-3) Ramanujan 11 : 9.68844821613009 Error: 0.456 x10(-9) Holder mean : 9.70448163064351 Error: 0.001655 (s: 1.534928535661375) Cantrell : 9.68854806636610 Error: 0.010 x10(-3) (s: 0.829896183162743) Exact : 9.69160447929656 Error: 0.326 x10(-3) ( 10 terms) Exact : 9.68844822218643 Error: 0.169 x10(-9) ( 50 terms) Exact : 9.68844822054768 Error: 0.000 x10(-12) ( 250 terms) Exact : 9.68844822054768 Error: 0.000 x10(-12) ( 1250 terms) Necat (constant s) : 9.70448163064351 Error: 0.001655 (s: 1.534928535661375) Necat (linear s) : 9.68804165995463 Error: 0.042 x10(-3) (s: 1.541982035153419) Necat (power s) : 9.68839441141184 Error: 0.006 x10(-3) (s: 1.541829751678717) Bessel : 9.68844822054742 Error: 0.026 x10(-12) ( 10 terms) Bessel : 9.68844822054768 Error: 0.000 x10(-12) ( 100 terms) Bessel : 9.68844822054768 Error: 0.000 x10(-12) ( 1000 terms)Example: a=1, b=10
e : 0.9949874371 h : 0.6694214876 b/a: 0.1000000000 Numerical : 40.60042321878313 Error: 0.967 x10(-3) ( 10 segments) Numerical : 40.63932399169911 Error: 0.010 x10(-3) ( 100 segments) Numerical : 40.63973762290312 Error: 0.103 x10(-6) ( 1000 segments) Numerical : 40.63974175922775 Error: 0.001 x10(-6) ( 10000 segments) Numerical : 40.63974180059099 Error: 0.010 x10(-9) ( 100000 segments) Numerical : 40.63974180100578 Error: 0.078 x10(-12) ( 1000000 segments) Numerical : 40.63974180101561 Error: 0.164 x10(-12) ( 10000000 segments) Numerical : 40.63974180100927 Error: 0.008 x10(-12) (100000000 segments) Integral : 40.64219391439480 Error: 0.060 x10(-3) ( 10 segments) Integral : 40.63974180100898 Error: 0.001 x10(-12) ( 100 segments) Integral : 40.63974180100900 Error: 0.001 x10(-12) ( 1000 segments) Integral : 40.63974180100901 Error: 0.001 x10(-12) ( 10000 segments) Integral : 40.63974180100879 Error: 0.004 x10(-12) ( 100000 segments) Integral : 40.63974180101027 Error: 0.032 x10(-12) ( 1000000 segments) Integral : 40.63974180100751 Error: 0.036 x10(-12) ( 10000000 segments) Integral : 40.63974180107515 Error: 0.002 x10(-9) (100000000 segments) Anonymous : 39.92419204913146 Error: 0.017607 Hudson : 40.63151007270351 Error: 0.203 x10(-3) Ramanujan 1 : 40.60552518514097 Error: 0.842 x10(-3) Ramanujan 11 : 40.63927210018871 Error: 0.012 x10(-3) Holder mean : 40.75658566530318 Error: 0.002875 (s: 1.534928535661375) Cantrell : 40.63266238102069 Error: 0.174 x10(-3) (s: 0.819493675056663) Exact : 41.42030490115282 Error: 0.019207 ( 10 terms) Exact : 40.70623873690818 Error: 0.001636 ( 50 terms) Exact : 40.64052842541464 Error: 0.019 x10(-3) ( 250 terms) Exact : 40.63974180295930 Error: 0.048 x10(-9) ( 1250 terms) Necat (constant s) : 40.75658566530318 Error: 0.002875 (s: 1.534928535661375) Necat (linear s) : 40.64117543670444 Error: 0.035 x10(-3) (s: 1.591286056206585) Necat (power s) : 40.63991083864542 Error: 0.004 x10(-3) (s: 1.591960989144423) Bessel : 40.63963178516602 Error: 0.003 x10(-3) ( 10 terms) Bessel : 40.63974180100895 Error: 0.000 x10(-12) ( 100 terms) Bessel : 40.63974180100895 Error: 0.000 x10(-12) ( 1000 terms)Example: a = 1, b = 1000 (Extreme eccentricity)
e : 0.9999995000 h : 0.9960079880 b/a: 0.0010000000 Numerical : 4000.00700622830936 Error: 0.002 x10(-3) ( 10 segments) Numerical : 4000.01160343712263 Error: 0.996 x10(-6) ( 100 segments) Numerical : 4000.01520168268371 Error: 0.097 x10(-6) ( 1000 segments) Numerical : 4000.01558399234045 Error: 0.001 x10(-6) ( 10000 segments) Numerical : 4000.01558806354569 Error: 0.010 x10(-9) ( 100000 segments) Numerical : 4000.01558810436791 Error: 0.080 x10(-12) ( 1000000 segments) Numerical : 4000.01558810497863 Error: 0.073 x10(-12) ( 10000000 segments) Numerical : 4000.01558809291328 Error: 0.003 x10(-9) (100000000 segments) Integral : 4004.12231000731981 Error: 0.001027 ( 10 segments) Integral : 4000.05272720403855 Error: 0.009 x10(-3) ( 100 segments) Integral : 4000.01561291779944 Error: 0.006 x10(-6) ( 1000 segments) Integral : 4000.01558810469305 Error: 0.001 x10(-12) ( 10000 segments) Integral : 4000.01558810466850 Error: 0.005 x10(-12) ( 100000 segments) Integral : 4000.01558810488496 Error: 0.049 x10(-12) ( 1000000 segments) Integral : 4000.01558810481674 Error: 0.032 x10(-12) ( 10000000 segments) Integral : 4000.01558810381857 Error: 0.217 x10(-12) (100000000 segments) Anonymous : 3848.93374981198258 Error: 0.037770 Hudson : 3992.68624906240484 Error: 0.001832 Ramanujan 1 : 3983.74047795885099 Error: 0.004069 Ramanujan 11 : 3998.50189422870017 Error: 0.378 x10(-3) Holder mean : 4000.06474173655124 Error: 0.012 x10(-3) (s: 1.534928535661375) Cantrell : 4000.01691838166516 Error: 0.333 x10(-6) (s: 0.819493675056663) Exact : 4106.61427461212224 Error: 0.026650 ( 10 terms) Exact : 4020.25802285236841 Error: 0.005061 ( 50 terms) Exact : 4004.01689018024035 Error: 0.001000 ( 250 terms) Exact : 4000.80887965779220 Error: 0.198 x10(-3) ( 1250 terms) Necat (constant s) : 4000.06474173655124 Error: 0.012 x10(-3) (s: 1.534928535661375) Necat (linear s) : 4000.01962527412616 Error: 0.001 x10(-3) (s: 1.693487200718332) Necat (power s) : 4000.01895467283884 Error: 0.842 x10(-6) (s: 1.698124485349185) Bessel : 3998.65719052395661 Error: 0.340 x10(-3) ( 10 terms) Bessel : 4000.00902882897572 Error: 0.002 x10(-3) ( 100 terms) Bessel : 4000.01558741091912 Error: 0.173 x10(-9) ( 1000 terms) Approximation of an ellipse using arcsA constructional method for drawing an ellipse in drafting and engineering is usually referred to as the "4 center ellipse" or the "4 arc ellipse". It is a procedure for drawing an approximation to an ellipse using 4 arc sections, one at each end of the major axes (length a) and one at each end of the minor axes (length b). This approximation works well for "fat" ellipses (where minor width is not too small with respect to the major axis). The procedure is documented below along with the diagram illustrating the quantities (a,b,L,φ,θ) used in the calculation. The manual construction method is outlined in the following from: Approximating an Ellipse With Four Circular Arcs Tirupathi R. Chandrupatla (Mechanical Engineering Department) Thomas J. Osler (Mathematics Department) Rowan University Glassboro, New Jersey 08028 ![]()
The radii for the two arcs are R = (a sin(θ) + b cos(θ) - b) / (sin(θ) + cos(θ) - 1) where
ø = atan(b/a) θ = asin(cos(φ))
The following shows the meaning of the symbols used. ![]()
|