学习内容:求一个点到椭球面的距离(上)

写在前面

最近的研究中大量的用到了椭圆、椭球等东西,而且我在学习过程中发现中文网络上居然查不到“点到椭球面的距离”这种看起来非常理所当然大家都会的东西,甚至连个推导过程都没有.在谷歌上查到了一篇相关的文章,在学习过程中,想把心得体会等记录下来,写在这里.那篇文章的链接先放在这里了.
下载原pdf

点到椭圆的距离

椭圆的一些基础知识

一个二维的普通椭圆可以由一个中心点 C \mathbf{C} C,一组椭圆轴方向的标准正交的向量 { U 0 , U 1 } \{\mathbf{U}_0,\mathbf{U}_1\} {U0,U1},以及 e i e_i ei表示(其中 e 0 ≥ e 1 > 0 e_0\geq e_1>0 e0e1>0).椭圆上的所有点可以表示为

P = C + x 0 U 0 + x 1 U 1 (1) \mathbf{P} = \mathbf{C}+x_0\mathbf{U}_0+x_1\mathbf{U}_1 \tag{1} P=C+x0U0+x1U1(1)

其中

( x 0 e 0 ) 2 + ( x 1 e 1 ) 2 = 1 (2) (\frac{x_0}{e_0})^2+(\frac{x_1}{e_1})^2=1 \tag{2} (e0x0)2+(e1x1)2=1(2)

由于轴方向是正交的,则有 x i = U i ⋅ ( P − C ) x_{i}=\mathbf{U}_{i} \cdot(\mathbf{P}-\mathbf{C}) xi=Ui(PC),带入(2)式中,可以得到
( P − C ) T M ( P − C ) = 1 (3) (\mathbf{P}-\mathbf{C})^T M(\mathbf{P}-\mathbf{C})=1\tag{3} (PC)TM(PC)=1(3)

其中 M = R T D R M = R^TDR M=RTDR, R R R是正交矩阵,每一列分别为 { U 0 , U 1 } \{\mathbf{U}_0,\mathbf{U}_1\} {U0,U1}; D D D是一个对角阵,对角元素为 1 e 0 2 , 1 e 1 2 \frac{1}{e_0^2},\frac{1}{e_1^2} e021,e121.

想求出点到椭圆的距离,在椭圆对应的坐标系下进行求解就很重要.也就是说将任一点 Q Q Q表示为 Q = C + y 0 U 0 + y 1 U 1 \mathbf{Q} = \mathbf{C}+y_0\mathbf{U}_0+y_1\mathbf{U}_1 Q=C+y0U0+y1U1的形式.由方程(3)定义的点 Q Q Q到点 P P P 的距离,与由椭圆标准方程定义的 Y = ( y 0 , y 1 ) Y=(y_0,y_1) Y=(y0,y1) X = ( x 0 , x 1 ) X=(x_0,x_1) X=(x0,x1)的距离是相等的.

再利用椭圆的对称性简化我们的问题(这里就不再赘述).我们只考虑在第一象限的点.

我们的问题是找到点到椭圆的距离,那么也就是要在椭圆上找到到目标点最近的点.

一个重要发现:椭圆上最近点处的法线指向目标点

标准椭圆的参数化表达式为 X ( θ ) = ( e 0 cos ⁡ θ , e 1 sin ⁡ θ ) , θ ∈ [ 0 , 2 π ) X(\theta)=(e_0\cos{\theta},e_1\sin{\theta}),\theta\in\left[0,2\pi\right) X(θ)=(e0cosθ,e1sinθ),θ[0,2π),点 Y \mathbf{Y} Y 到椭圆上任意一点的距离可表示为:

F ( θ ) = ∣ X ( θ ) − Y ∣ 2 (4) F(\theta)=|\mathbf{X}(\theta)-\mathbf{Y}|^2\tag{4} F(θ)=X(θ)Y2(4)

这是一个非负、周期性、可微的函数,因此它一定会有一个全局最小值,此时的一阶导数值为0,即

F ′ ( θ ) = 2 ( X ( θ ) − Y ) ∗ X ′ ( θ ) = 0 (5) F'(\theta)=2(\mathbf{X}(\theta)-\mathbf{Y})*\mathbf{X}'(\theta)=0\tag{5} F(θ)=2(X(θ)Y)X(θ)=0(5)

这是两个向量的内积,那么也就是说这两个向量是垂直的. X ′ ( θ ) \mathbf{X}'(\theta) X(θ) X ( θ ) \mathbf{X}(\theta) X(θ)处的切线,则说明点 Y \mathbf{Y} Y 到最近的点 X \mathbf{X} X所连接成的向量就正是这里的曲线的法线.

有了这一发现,我们再利用椭圆的隐式表达式: G ( x 0 , x 1 ) = ( x 0 / e 0 ) 2 + ( x 1 / e 1 ) 2 − 1 = 0 G(x_0,x_1)=(x_0/e_0)^2+(x_1/e_1)^2-1=0 G(x0,x1)=(x0/e0)2+(x1/e1)21=0, G ( x 0 , x 1 ) G(x_0,x_1) G(x0,x1)处的梯度就是点 ( x 0 , x 1 ) (x_0,x_1) (x0,x1) 处的法向量.则有 ( y 0 , y 1 ) − ( x 0 , x 1 ) = t ∇ G ( x 0 , x 1 ) / 2 = t ( x 0 / e 0 2 , x 1 / e 1 2 ) (y_0,y_1)-(x_0,x_1)=t\nabla G(x_0,x_1)/2=t(x_0/e_0^2,x_1/e_1^2) (y0,y1)(x0,x1)=tG(x0,x1)/2=t(x0/e02,x1/e12), 也即

y 0 = x 0 ( 1 + t e 0 2 ) , y 1 = x 1 ( 1 + t e 1 2 ) (6) y_0 = x_0(1+\frac{t}{e_0^2}),y_1 = x_1(1+\frac{t}{e_1^2})\tag{6} y0=x0(1+e02t),y1=x1(1+e12t)(6)

如果 ( y 0 , y 1 ) (y_0,y_1) (y0,y1)在椭圆外,则 t > 0 t>0 t>0;如果 ( y 0 , y 1 ) (y_0,y_1) (y0,y1)在椭圆内,则 t < 0 t<0 t<0;如果 ( y 0 , y 1 ) (y_0,y_1) (y0,y1)在椭圆上,则 t = 0 t=0 t=0,距离为0.

圆的情况

如果 e 0 = e 1 e_0=e_1 e0=e1,则椭圆为一个圆.原点 ( 0 , 0 ) (0,0) (0,0)在圆上有无限个距离最近的点,显然最近距离为 e 0 e_0 e0. 非原点的任意一点 ( y 0 , y 1 ) (y_0,y_1) (y0,y1)的距离最近的点为 ( x 0 , x 1 ) = e 0 ( y 0 , y 1 ) / ∣ ( y 0 , y 1 ) ∣ (x_0,x_1)=e_0(y_0,y_1)/|(y_0,y_1)| (x0,x1)=e0(y0,y1)/(y0,y1).
式(6)中的 t = − e 0 2 + e 0 y 0 2 + y 1 2 t=-e_{0}^{2}+e_{0} \sqrt{y_{0}^{2}+y_{1}^{2}} t=e02+e0y02+y12 .

目标点为原点

y 0 = 0 , y 1 = 0 y_0=0,y_1=0 y0=0,y1=0.式(6)化为 0 = x 0 ( 1 + t / e 0 2 ) , 0 = x 1 ( 1 + t / e 1 2 ) 0=x_{0}\left(1+t / e_{0}^{2}\right),0=x_{1}\left(1+t/e_{1}^{2}\right) 0=x0(1+t/e02),0=x1(1+t/e12), 考虑4个情况

  • x 0 = 0 , x 1 = 0 x_0=0,x_1=0 x0=0,x1=0,显然不在椭圆上,排除掉;
  • x 0 = 0 , x 1 ≠ 0 x_0=0,x_1\ne 0 x0=0,x1=0,有 t = − e 1 2 t=-e_1^2 t=e12,这个点为 ( 0 , e 1 ) (0,e_1) (0,e1)
  • x 0 ≠ 0 , x 1 = 0 x_0\ne 0,x_1=0 x0=0,x1=0,有 t = − e 0 2 t=-e_0^2 t=e02,这个点为 ( e 0 , 0 ) (e_0,0) (e0,0)
  • x 0 ≠ 0 , x 1 ≠ 0 x_0\ne 0,x_1\ne 0 x0=0,x1=0,有 t = − e 1 2 t=-e_1^2 t=e12 t = − e 1 2 t=-e_1^2 t=e12,显然不成立,排除掉;

那么只有 ( 0 , e 1 ) (0,e_1) (0,e1) ( e 0 , 0 ) (e_0,0) (e0,0)这两个点满足条件,而显然 ( 0 , e 1 ) (0,e_1) (0,e1)更近,则其距离为 d = e 1 d=e_1 d=e1

目标点在 y y y轴上

y 0 = 0 , y 1 > 0 y_0=0,y_1>0 y0=0,y1>0.式(6)化为 0 = x 0 ( 1 + t / e 0 2 ) , y 1 = x 1 ( 1 + t / e 1 2 ) 0=x_{0}\left(1+t / e_{0}^{2}\right),y_1=x_{1}\left(1+t/e_{1}^{2}\right) 0=x0(1+t/e02),y1=x1(1+t/e12), 考虑2 个情况

  • x 0 = 0 x_0=0 x0=0,为使其在椭圆上,这个点为 ( 0 , e 1 ) (0,e_1) (0,e1);
  • x 0 ≠ 0 x_0\ne0 x0=0,有 t = − e 0 2 , y 1 = x 1 ( 1 − e 0 2 / e 1 2 t=-e_0^2,y_1=x_1(1-e_0^2/e_1^2 t=e02,y1=x1(1e02/e12.而由于 x 1 ≥ 0 , e 0 > e 1 x_1\geq 0,e_0>e_1 x10,e0>e1,有 y 1 < 0 y_1<0 y1<0 矛盾
    因此最近的点为 ( 0 , e 1 ) (0,e_1) (0,e1),距离为 d = ∣ e 1 − y 1 ∣ d=|e_1-y_1| d=e1y1

目标点在 x x x轴上

y 0 > 0 , y 1 = 0 y_0>0,y_1=0 y0>0,y1=0.式(6)化为 y 0 = x 0 ( 1 + t / e 0 2 ) , 0 = x 1 ( 1 + t / e 1 2 ) y_0=x_{0}\left(1+t / e_{0}^{2}\right),0=x_{1}\left(1+t/e_{1}^{2}\right) y0=x0(1+t/e02),0=x1(1+t/e12), 考虑2 个情况

  • x 1 = 0 x_1=0 x1=0,为使其在椭圆上,这个点为 ( e 0 , 0 ) (e_0,0) (e0,0);距离的平方为

d 0 2 = ( y 0 − e 0 ) 2 (7) d_0^2=(y_0-e_0)^2 \tag{7} d02=(y0e0)2(7)

  • x 1 ≠ 0 x_1\ne0 x1=0,有 t = − e 1 2 t=-e_1^2 t=e12,把 t t t代入可得 y 0 = x 0 ( 1 − e 1 2 / e 0 2 ) y_0=x_0(1-e_1^2/e_0^2) y0=x0(1e12/e02).由于点 ( x 0 , x 1 ) (x_0,x_1) (x0,x1)在椭圆上, x 0 = e 0 2 y 0 / ( e 0 2 − e 1 2 ) ≤ e 0 x_0=e_0^2y_0/(e_0^2-e_1^2)\leq e_0 x0=e02y0/(e02e12)e0,可知道 y 0 ≤ ( e 0 2 − e 1 2 ) / e 0 < e 0 . y_0\leq (e_0^2-e_1^2)/e_0<e_0. y0(e02e12)/e0<e0.因此这个情况只包含了 ( y 0 , 0 ) (y_0,0) (y0,0)在椭圆中的情况.而当 y 0 ≥ ( e 0 2 − e 1 2 ) / e 0 y_0\geq (e_0^2-e_1^2)/e_0 y0(e02e12)/e0时,最近的点一定为 ( e 0 , 0 ) (e_0,0) (e0,0).若 y 0 ≤ ( e 0 2 − e 1 2 ) / e 0 y_0\leq (e_0^2-e_1^2)/e_0 y0(e02e12)/e0,解得点 x 1 = e 1 1 − ( x 0 / e 0 ) 2 x_1=e_1\sqrt{1-(x_0/e_0)^2} x1=e11(x0/e0)2 ,距离的平方为

d 1 2 = ( x 0 − y 0 ) 2 + x 1 2 = e 1 2 ( 1 − y 0 2 e 0 2 − e 1 2 ) (8) d_{1}^{2}=\left(x_{0}-y_{0}\right)^{2}+x_{1}^{2}=e_{1}^{2}\left(1-\frac{y_{0}^{2}}{e_{0}^{2}-e_{1}^{2}}\right)\tag{8} d12=(x0y0)2+x12=e12(1e02e12y02)(8)

两个候选点分别为 ( e 0 , 0 ) 和 ( x 0 , x 1 ) \left(e_{0}, 0\right) \text {和}\left(x_{0}, x_{1}\right) (e0,0)(x0,x1),我们需要判别哪个更接近 ( y 0 , 0 ) (y_0,0) (y0,0).

d 0 2 − d 1 2 = ( e 0 y 0 + e 1 2 − e 0 2 ) 2 e 0 2 − e 1 2 ≥ 0 (9) d_{0}^{2}-d_{1}^{2}=\frac{\left(e_{0} y_{0}+e_{1}^{2}-e_{0}^{2}\right)^{2}}{e_{0}^{2}-e_{1}^{2}} \geq 0 \tag{9} d02d12=e02e12(e0y0+e12e02)20(9)

因此 ( x 0 , x 1 ) \left(x_{0}, x_{1}\right) (x0,x1)是更近的点.

总结:在第一象限中,距离 ( y 0 , 0 ) (y_0,0) (y0,0)最近的点需要分类讨论:

  1. 0 < y 0 < ( e 0 2 − e 1 2 ) / e 0 0<y_0<(e_0^2-e_1^2)/e_0 0<y0<(e02e12)/e0,最近的点为 ( x 0 , x 1 ) (x_0,x_1) (x0,x1)其中 x 0 = e 0 2 y 0 / ( e 0 2 − e 1 2 ) , x 1 = e 1 1 − ( x 0 / e 0 ) 2 x_0=e_0^2y_0/(e_0^2-e_1^2),x_1=e_1\sqrt{1-(x_0/e_0)^2} x0=e02y0/(e02e12),x1=e11(x0/e0)2 ,距离为 d = ( x 0 − y 0 ) 2 + x 1 2 = e 1 2 ( 1 − y 0 2 e 0 2 − e 1 2 ) d=\sqrt{\left(x_{0}-y_{0}\right)^{2}+x_{1}^{2}}=\sqrt{e_{1}^{2}\left(1-\frac{y_{0}^{2}}{e_{0}^{2}-e_{1}^{2}}\right)} d=(x0y0)2+x12 =e12(1e02e12y02)
  2. y 0 ≥ ( e 0 2 − e 1 2 ) / e 0 y_0\geq(e_0^2-e_1^2)/e_0 y0(e02e12)/e0,最近的点为 ( e 0 , 0 ) (e_0,0) (e0,0),距离为 d = ∣ y 0 − e 0 ∣ d=|y_0-e_0| d=y0e0

目标点严格在第一象限

y 0 > 0 , y 1 > 0 y_0>0,y_1>0 y0>0,y1>0,则方程(6)的解为

x 0 = e 0 2 y 0 t + e 0 2 , x 1 = e 1 2 y 1 t + e 1 2 (10) x_{0}=\frac{e_{0}^{2} y_{0}}{t+e_{0}^{2}}, \quad x_{1}=\frac{e_{1}^{2} y_{1}}{t+e_{1}^{2}}\tag{10} x0=t+e02e02y0,x1=t+e12e12y1(10)

由于只考虑第一象限,则有 x 0 ≥ 0 , x 1 ≥ 0 x_{0} \geq 0 , x_{1} \geq 0 x00,x10,也即 t > − e 0 2 , t > − e 1 2 t>-e_{0}^{2} ,t>-e_{1}^{2} t>e02,t>e12,又由于 e 0 > e 1 e_0>e_1 e0>e1,则有 t > − e 1 2 t>-e_{1}^{2} t>e12.
将等式(10)代回到(2)中有

F ( t ) = ( e 0 y 0 t + e 0 2 ) 2 + ( e 1 y 1 t + e 1 2 ) 2 − 1 = 0 (11) F(t)=\left(\frac{e_{0} y_{0}}{t+e_{0}^{2}}\right)^{2}+\left(\frac{e_{1} y_{1}}{t+e_{1}^{2}}\right)^{2}-1=0\tag{11} F(t)=(t+e02e0y0)2+(t+e12e1y1)21=0(11)

此函数的定义域为 t ∈ ( − e 1 2 , ∞ ) t\in(-e_1^2,\infty) t(e12,),距离目标点最近的点由此等式的根定义.

一阶导、二阶导为

F ′ ( t ) = − 2 e 0 2 y 0 2 ( t + e 0 2 ) 3 − 2 e 1 2 y 1 2 ( t + e 1 2 ) 3 , F ′ ′ ( t ) = 6 e 0 2 y 0 2 ( t + e 0 2 ) 4 + 6 e 1 2 y 1 2 ( t + e 1 2 ) 4 (12) F^{\prime}(t)=-\frac{2 e_{0}^{2} y_{0}^{2}}{\left(t+e_{0}^{2}\right)^{3}}-\frac{2 e_{1}^{2} y_{1}^{2}}{\left(t+e_{1}^{2}\right)^{3}}, \quad F^{\prime \prime}(t)=\frac{6 e_{0}^{2} y_{0}^{2}}{\left(t+e_{0}^{2}\right)^{4}}+\frac{6 e_{1}^{2} y_{1}^{2}}{\left(t+e_{1}^{2}\right)^{4}}\tag{12} F(t)=(t+e02)32e02y02(t+e12)32e12y12,F(t)=(t+e02)46e02y02+(t+e12)46e12y12(12)

在定义域上有 F ′ ( t ) < 0 , F ′ ′ ( t ) > 0 F^{\prime}(t)<0,F^{\prime \prime}(t)>0 F(t)<0,F(t)>0,且

lim ⁡ t → − e 1 2 + F ( t ) = + ∞ , lim ⁡ t → ∞ F ( t ) = − 1 (13) \lim _{t \rightarrow-e_{1}^{2}+} F(t)=+\infty, \lim _{t \rightarrow \infty} F(t)=-1\tag{13} te12+limF(t)=+,tlimF(t)=1(13)
第一个表达式表示单侧极限( t → − e 1 2 , 且 t > − e 1 2 t\rightarrow -e_1^2,\text{且}t>-e_1^2 te12,t>e12)
F ( t ) F(t) F(t)是一个关于 t t t的严格递减函数,函数值首先为正、然后变成负数,因此必定有唯一零点.

F(t)的函数图像与零点tbar
因此只需要解出来这样的一个 t ˉ \bar{t} tˉ,代入到(6)中即可得出 ( x 0 , x 1 ) (x_0,x_1) (x0,x1),然后就可以求出来最小距离.

写在后面

要求点到椭球距离,需要先学习点到椭圆的距离,说实话,光打这篇文章就已经非常累了,还有些地方不是很能看得懂。
明天继续打后面的第二部分,也就是点到椭球面的距离。
而且在这里写博客的时候发现不会给方程标号,也不会引用。随后再研究研究,修改一下,尽量完善一下。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值