如何计算椭圆的周长

Sag*_*tam 4 python math ellipse

我想用给定的短轴和长轴值计算椭圆的周长。我目前正在使用Python

我已经计算了椭圆的短轴和长轴长度,即ab

计算面积很容易,但我想计算椭圆的周长来计算圆角长度。你有什么主意吗 ?

小智 6

根据拉马努金求椭圆周长的第一个近似公式 ->

>>> import math
>>>
>>> def calculate_perimeter(a,b):
...     perimeter = math.pi * ( 3*(a+b) - math.sqrt( (3*a + b) * (a + 3*b) ) )
...     return perimeter
...
>>> calculate_perimeter(2,3)
15.865437575563961
Run Code Online (Sandbox Code Playgroud)

你可以比较结果谷歌计算器


f5r*_*e5d 5

一个定义问题:大、小轴不同于半大、半小
OP应该很清楚,那些抓取,与在线解决方案相比应该太

在此处输入图片说明

你可以得到 sympy 来(在数字上)解决问题,我使用的是完整的轴定义

from sympy import *
a, b, w = symbols('a b w')

x = a/2 * cos(w)
y = b/2 * sin(w)

dx = diff(x, w)
dy = diff(y, w)

ds = sqrt(dx**2 + dy**2)

def perimeter(majr, minr):
    return Integral(ds.subs([(a,majr),(b,minr)]), (w, 0, 2*pi)).evalf().doit()

print('test1: a, b = 1 gives dia = 1 circle,  perimeter/pi = ',
      perimeter(1, 1)/pi.evalf())

print('test2: a, b = 4,6 ellipse perimeter = ', perimeter(4,6))

test1: a, b = 1 gives dia = 1 circle,  perimeter/pi =  1.00000000000000
test2: a, b = 4,6 ellipse perimeter =  15.8654395892906
Run Code Online (Sandbox Code Playgroud)

也可以将符号 ds 方程导出为函数,以尝试与其他 Python lib 集成函数一起使用

func_dw = lambdify((w, a, b), ds)

from scipy import integrate

print(integrate.quad(func_dw, 0, 2*np.pi, args=(4, 6)))

(15.865439589290586, 2.23277254813499e-12)  
Run Code Online (Sandbox Code Playgroud)

scipy.integrate.quad(func, a, b, args=()...
Returns:
y : float, func从a到b的积分.
abserr : float, 结果中绝对误差的估计

  • 不需要`scipy.integrate.quad`。使用`scipy.special.ellipe`。 (3认同)