找到椭圆的所有4个法线

时间:2013-12-03 19:52:53

标签: math geometry computational-geometry ellipse

在轴向对齐的,以原点为中心的椭圆 E 外部给出 p 点,找到 E的(最多)四个唯一法线通过 p

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

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

3 个答案:

答案 0 :(得分:5)

假设椭圆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) 而不是的直线,当椭圆为负值时,这与椭圆E是垂直的dy/dx的倒数:

    (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的许多法线。

通过反射对称,假设p位于E的外部,我们可能会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相交,并且只有两个法线:

Ellipse with hyperbola

如果将两个未知数(x,y)中的两个方程组的系统简化为一个未知数中的一个方程,则最简单的编码查找方法是a bisection method,但知道某些根的可能位置/十字路口将加快我们的搜索速度。第一象限中的交点是Ep的最近点,同样第三象限中的交点是距离E p的最远点。如果点p更接近于短轴的上端点,则双曲线的分支将一起移动到足以在第四象限中创建多达两个交点。

一种方法是通过与x轴的交点来参数化E。从p法线到椭圆的线必须与长轴相交,长轴是有限区间[-a,+a]。我们可以测试通过q=(x,y)p=(u,v)的行的交点(z,0)的上交点和下交点,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

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

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

答案 1 :(得分:0)

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

图中心的星形“焦散”描绘了WGS-84椭圆体的曲率中心,因为纬度从极点到赤道变化。请注意,由于极化变平,极点处的曲率中心位于赤道的相对侧,赤道处的曲率中心比旋转轴更靠近曲面。

无论线路交叉,笛卡尔位置的纬度都不止一个。绿色圆圈显示我们的算法在哪里挣扎。如果你认为我切断了它们到达轴的这些法向量,那么对于这个SO线程中考虑的问题,你会有更多的法线给定位置。在腐蚀性物质内部有4个纬度/法线,在外部有2个纬度/法线。

答案 2 :(得分:0)

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