测量沿椭圆的距离

6
假设我们有一个椭圆x^2/a^2 + y^2/b^2。
在椭圆上取一点(a*cos(t), b*sin(t)),如何最快地找到另一点,使它们之间的距离是给定的d呢?[d小于pi*a*b]。
当我有一个角落[四分之一椭圆]并需要找到沿着它分隔为一些'd'的点时,遇到了这个问题。

3
您的意思是沿着圆周距离,还是沿着弦长距离? - NPE
1
这可能会有所帮助:http://en.wikipedia.org/wiki/Elliptic_integral#Complete_elliptic_integral_of_the_second_kind。 - R. Martinho Fernandes
2
一种计算方法是找到椭圆上的对称点,然后沿着距离的两侧使用二分搜索。 - Peteris
1
这是一个“难”问题。如果你想要快速解决它,你就必须近似处理它(如果你想知道原因,可以谷歌搜索“椭圆弧长”)。 - etarion
问题是要沿着圆周找到 - 因此二分查找不起作用。是的,我看了第二类椭圆积分,我想知道最快的实现方式是什么。 - Anil Shanbhag
显示剩余4条评论
2个回答

3

椭圆的子段长度是一个椭圆积分,没有封闭形式的解决方案。

为了计算沿着椭圆的距离,你需要一个数值积分程序。我建议使用Romberg或Gauss Quadrature(在维基百科上查找)。如果您需要重复执行此操作,则预先计算沿着椭圆周围的一堆点的距离,以便您可以快速到达正确的区域,然后开始积分。

您需要使用二分法(在维基百科上查找)来找到所需的长度。


你可能想看一下数值计算的相关资料。这是旧版的FORTRAN,但它们涵盖了数学方面的内容。购买新书第三版是值得的。http://ftp.eq.uc.pt/books/NumericalRecipes/f6-11.pdf - Dov
我还发现了一个带有求解器的库:http://www.alglib.net/specialfunctions/ellipticintegrals.php - Dov

0

椭圆弧的长度没有解析解。这意味着你不能将数字代入方程中得出结果,而是要使用数值积分的方法。

Simpsons rule非常容易实现,尽管可能比其他答案中提到的方法慢。

现在,你已经有了一种找到椭圆弧长度的方法,只需测量不同的端点,直到找到一个长度为d的可接受公差。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接