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供参考: