2011-05-20 145 views
6

假设我们有一个椭圆x^2/a^2 + y^2/b^2。在椭圆上取一个点(a * cos(t),b * sint(t)),找到椭圆上另一个点的最快方法是使它们之间的距离是给定的d。 [d小于pi * a * b]。椭圆测量距离

当我有一个角[四分之一椭圆]并且需要找到沿着它的某些'd'分隔点时遇到问题。

+3

你的意思是沿圆周的距离,或沿着弦? – NPE 2011-05-20 11:06:24

+1

[这可能有帮助](http://en.wikipedia.org/wiki/Elliptic_integral#Complete_elliptic_integral_of_the_second_kind)。 – 2011-05-20 11:10:36

+1

一种计算方法是在椭圆上找到相反的点,然后在距离两侧使用二进制搜索。 – Peteris 2011-05-20 11:15:16

回答

3

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

为了计算沿椭圆的距离,您将需要一个数值积分例程。我推荐Romberg,或者Gauss Quadrature(查看维基百科)。如果您正在重复执行此操作,请在椭圆周围的一堆点上预先计算距离,以便您可以快速到达正确的区域,然后开始进行积分。

您需要平分(查看维基百科)才能找到所需的长度。

+0

你可能想看看数字食谱。这是旧的FORTRAN版本,但它们涵盖了数学。值得购买新书,第3版。 http://ftp.eq.uc.pt/books/NumericalRecipes/f6-11.pdf – Dov 2011-05-24 17:33:40

+0

我还发现这个库有一个求解器:http://www.alglib.net/specialfunctions/ellipticintegrals.php – Dov 2011-05-24 18:15:50

0

椭圆弧的长度没有解析解。这意味着您将无法将数字插入等式中查找结果,而是使用数值积分方法。

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

现在,你有办法找到一个椭圆弧的长度,只是衡量不同的终点,直到你找到长度d之一,一些可接受的公差