【问题标题】:Measuring distance along ellipse沿椭圆测量距离
【发布时间】:2011-05-20 10:58:33
【问题描述】:

假设我们有一个椭圆 x^2/a^2 + y^2/b^2。

在椭圆上取一个点 (a*cos(t),b*sint(t)),找到椭圆上另一个点的最快方法是什么,使得它们之间的距离是给定的 d。 [d 小于 pi*a*b]。

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

【问题讨论】:

  • 你的意思是沿圆周的距离,还是沿弦的距离?
  • 一种计算方法是找到椭圆上的相对点,然后根据距离沿任一侧使用二进制搜索。
  • 这是一个“难题”。如果您想快速获得它,则必须对其进行近似计算(如果您想知道原因,请在谷歌上搜索“椭圆弧长”)。
  • @Peteris +1 如果 OP 不知道什么是二分搜索 - 这很容易做到(当你知道你将能够找到这一点时,如果有的话,它会变得有点难看不保证该点存在)。

标签: c++ algorithm distance ellipse


【解决方案1】:

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

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

您需要平分(在 Wikipedia 上查找)以找到所需的长度。

【讨论】:

【解决方案2】:

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

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

既然你有办法找到椭圆弧的长度,只需测量不同的端点,直到你找到一个长度为 d 到某个可接受的公差的端点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多