【问题标题】:Find all 4 possible normals to an ellipse找到椭圆的所有 4 个可能的法线
【发布时间】:2013-12-03 19:52:53
【问题描述】:

给定一个点 p 在一个轴向对齐的、以原点为中心的椭圆 E 之外,找到 E 的(最多)四个唯一法线em> 路过p

这不是 Mathematica 问题。直接计算太慢;我愿意牺牲精度和准确性来换取速度。

我在网上搜索过,但我发现所有的计算都涉及过于复杂的计算,如果直接实施这些计算似乎缺乏我需要的性能。有没有更“编程”的方式来做到这一点,比如使用矩阵或将椭圆缩放成圆形?

【问题讨论】:

  • 一个椭圆有无数条法线。你指的是哪4个?你能画出你要找的东西吗?
  • 这个问题似乎是题外话,因为它是关于数学问题而不是关于编程。更适合math.stackexchange.com
  • @andand AFAIK,从椭圆上的某个点开始最多只能有 4 个法线。
  • 图片有帮助...您的问题从未描述过该点与您感兴趣的特定法线之间的关系。
  • @TimurNuriyasov:不幸的是,这将归结为寻找椭圆的根。同样应用一些转换也无济于事。但是,如果您可以接受近似解,那么简单的牛顿法求解器将很快收敛。 (编辑删除了关于椭圆曲线的那部分,因为它不是很准确)。

标签: math geometry computational-geometry ellipse


【解决方案1】:

假设椭圆E处于“标准位置”,中心在原点,轴平行于坐标轴:

    (x/a)^2 + (y/b)^2 = 1   where a > b > 0

边界情况a=b 是圆形,其中法线只是通过中心(原点)的线,因此很容易找到。所以我们省略了对这些情况的讨论。

椭圆在任意点(x,y)的切线斜率可以通过隐式微分求得:

    dy/dx = -(b^2 x)/(a^2 y)

对于通过(x,y)和椭圆上指定点p = (u,v)的直线不是,当它的斜率为@987654331的负倒数时椭圆E的法线@:

    (y-v)/(x-u) * (-b^2 x)/(a^2 y) = -1       (N)

简化为:

    (x - (1+g)u) * (y + gv) = -g(1+g)uv  where g = b^2/(a^2 - b^2)

在这种形式中,我们认识到它是右矩形双曲线方程。根据椭圆和双曲线 (2,3,4) 之间有多少交点,我们有很多法线到 E 穿过 p

通过反射对称性,如果假设pE 之外,我们可以将p 放在第一象限:

    (u/a)^2 + (v/b)^2 > 1    (exterior to E)
          u,v > 0            (1'st quadrant)

我们可能有u=0v=0 的边界情况,即点p 位于E 的轴上,但这些情况可能会简化为求解二次方,因为两个法线是(重合的)通过该轴的端点的线。我们暂时推迟对这些特殊情况的进一步讨论。

这是一个带有a=u=5,b=v=3 的插图,其中双曲线只有一个分支与E 相交,并且只有两条法线:

如果两个未知数中的两个方程组(x,y) 被简化为一个未知数中的一个方程,最简单的求根方法是a bisection method,但是了解一些关于根/交叉点的可能位置的信息将加快我们的搜索。第一象限的交点是Ep 的最近点,同样第三象限的交点是Ep 的最远点。如果点p 离短轴的上端点更近一点,双曲线的分支就会移动到一起,足以在第四象限中再创建两个交点。

一种方法是通过与 x 轴的交点参数化 E。从p 垂直于椭圆的线必须与长轴相交,长轴是有限区间[-a,+a]。我们可以测试通过p=(u,v)(z,0) 的直线的交点q=(x,y) 的上下交点,因为z-a 扫到+a,寻找椭圆和双曲线相交的地方。

更详细的:

1. Find the upper and lower points `q` of intersection of E with the
   line through `p` and `(z,0)` (amounts to solving a quadratic)

3. Check the sign of a^2 y(x-u) - b^2 x(y-v) at `q=(x,y)`, because it
   is zero if and only `q` is a point of normal intersection

一旦检测到符号发生变化的子区间(上部或下部),就可以对其进行细化以获得所需的精度。如果只需要适度的精度,则可能不需要使用更快的根查找方法,但即使需要它们,也有一个短的子区间来隔离一个根(或第四象限中的根对)将是有用的。

**更多来比较各种方法的收敛性**

【讨论】:

  • 如果我理解正确的话,这个算法需要我在寻找导数符号变化的同时执行几次迭代。应该执行多少次迭代?如果它需要多次迭代,有什么比用牛顿法找到四次 c4x^4 + c3x^3 + c2x^2 + c1x + c0 = 0 的四个根更好(这里假设 mathpages.com/home/kmath505/kmath505.htm)?
  • 这些都是好问题。二等分的收敛是缓慢但确定的,而牛顿的方法是快速但不确定的。因此,如果您需要(比如说)双精度答案,您可能希望从使用二分法(如概述)对根进行粗略分类开始,然后在根为“在仅包含该“单个”根的短时间间隔内隔离”。但是您的问题让我相信,需要简单的编码和适度的精度。
  • 请注意,寻求的是 (N) 左侧的符号变化,而不是“导数符号变化”。如果将 (N) 相乘,您会发现它是 x 的四次多项式。也许我应该将此添加到我的答案中。
  • @TimurNuriyasov:我没有忘记这一点!我正在写一个详细的比较(根据 Kevin Brow/Mathpages)用牛顿法与我提出的二分法求解。
  • 期待:)
【解决方案2】:

我必须解决与此类似的问题,用于 GPS 初始化。问题是:地球内部的一个点的纬度是多少,尤其是靠近中心的地方,它是单值的吗?有很多方法可以将 ECEF 笛卡尔坐标转换为大地纬度、经度和高度(查找“ECEF 到大地”)。我们使用一个快速的方法,每次迭代只有一次除法和 sqrt,而不是像大多数方法那样进行多次三角评估,但由于我在野外找不到它,所以我不能在这里给你。我将从 Lin 和 Wang 的方法开始,因为它只在迭代中使用除法。以下是距地球中心 100 公里范围内的点的椭球表面法线图(图中的北在上,实际上是 ECEF Z,而不是 Y):

图形中心的星形“焦散”描绘了 WGS-84 椭球的曲率中心,因为纬度从两极到赤道是不同的。请注意,由于极地扁平化,两极的曲率中心位于赤道的另一侧,并且赤道的曲率中心比旋转轴更靠近表面。

无论线条在哪里交叉,该笛卡尔位置的纬度都不止一个。绿色圆圈显示我们的算法在哪里挣扎。如果您认为我在它们到达轴的地方切断了这些法线向量,那么对于此 SO 线程中考虑的问题,对于给定位置,您将拥有更多的法线。焦散区内有 4 个纬度/法线,外部有 2 个。

【讨论】:

    【解决方案3】:

    问题可以表示为三次方程的解 给出 1、2 或 3 个实根.对于推导和封闭形式 解决方案参见Geodesics on an ellipsoid of revolution 的附录 B。 1 和 3 解决方案之间的边界是 astroid。

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2015-08-18
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多