Math 椭圆部分的周长

Math 椭圆部分的周长,math,geometry,ellipse,Math,Geometry,Ellipse,如何求椭圆的弧长 输入是 a = length of major axis b = length of minor axis c = angle from X axis 请注意,整个周长是 PI * ( 3*(a + b) - SQRT( (3*a + b) * (a + 3*b) ) ) 我想要的是椭圆周长的一部分的长度。起初这看起来像是一个纯粹的数学问题,但它不是 因为这个问题是用标准代数数学方法无法解决的(没有测角方法会有帮助,至少我们还不知道正确的答案/方程),因为我们根本不知道椭圆

如何求椭圆的弧长

输入是

a = length of major axis
b = length of minor axis
c = angle from X axis
请注意,整个周长是

PI * ( 3*(a + b) - SQRT( (3*a + b) * (a + 3*b) ) )

我想要的是椭圆周长的一部分的长度。

起初这看起来像是一个纯粹的数学问题,但它不是

因为这个问题是用标准代数数学方法无法解决的(没有测角方法会有帮助,至少我们还不知道正确的答案/方程),因为我们根本不知道椭圆的周长是多少。你能找到的所有方程(包括你发布的那个)都只是适合于特定偏心率范围的近似值(因此它们不精确,对于不同偏心率的椭圆,它们的误差越来越大)

沿周长的积分是可能的(曲线积分),但是IIRC会导致不可积分的温度,因此您需要使用数值方法来代替(编程时使用的方法)

计算弧长的最简单方法是将椭圆弧转换为一组非常小的直线,并使用参数椭圆方程在一些
for
循环中求和它们的长度

现在只需选择行数或数值积分方法,即可满足精度要求

椭圆的方向对于这个问题是没有意义的,因为你们的弧是从长轴开始的。。。所以你可以解决它,因为它总是轴对齐

<强>这里使用的线条简单:C++:< /强>

inte;
浮点数a=?,b=?,ang=?,l,aa,da=0.001*M_-PI,x,y,x0,y0;
aa=0.0;//起始角
x=a*cos(aa);//起点
y=b*sin(aa);
对于(e=1,l=0.0;e;)
{
aa+=da;如果(aa>=ang){e=0;aa=ang;}//到达终点角度?
x0=x;x=a*cos(aa);//椭圆(直线)上的2个后续点
y0=y;y=b*sin(aa);
l+=sqrt(((x-x0)*(x-x0))+((y-y0)*(y-y0));//将线长度添加到弧长度
}
其中,
a,b
是半轴,
ang
是弧的角度大小,
l
是弧长。
da
是积分步长,积分步长越小,精度越高,但计算时间越长

我直接在SO编辑器中键入了这段代码,所以它可能包含语法错误

顺便说一句,这里有几个与椭圆周长问题相关的QA供参考:


我认为缺少有关椭圆轴相对于X轴方向的信息。Taht假设“与X轴的角度”是分析椭圆哪一部分的信息。否则,情况正好相反。也就是说,有方向,但缺少零件信息。这似乎是纯粹的数学/几何。请记住,这是一个编程社区。沿椭圆弧长度进行积分,得到数值解。请注意,您的公式只是Ramanujan近似(没有椭圆周长的精确公式,它可能使用所谓的椭圆积分表示)Yunnosch。。谢谢你的评论。但这不是一道纯粹的数学题。谢谢你,斯佩克特。