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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


写在前面

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

点到椭球的距离

椭球的基本知识

一个普通椭球面可以由一个中心点 C \mathbf{C} C,一组椭球轴方向的标准正交的向量 { U 0 , U 1 , U 2 } \{\mathbf{U}_0,\mathbf{U}_1,\mathbf{U}_2\} {U0,U1,U2},以及 e i e_i ei表示(其中 e 0 ≥ e 1 ≥ e 2 > 0 e_0\geq e_1\geq e_2>0 e0e1e2>0).椭圆上的所有点可以表示为
P = C + x 0 U 0 + x 1 U 1 + x 2 U 2 (25) \mathbf{P} = \mathbf{C}+x_0\mathbf{U}_0+x_1\mathbf{U}_1+x_2\mathbf{U}_2\tag{25} P=C+x0U0+x1U1+x2U2(25)

其中
( x 0 e 0 ) 2 + ( x 1 e 1 ) 2 + ( x 2 e 2 ) 2 = 1 (26) (\frac{x_0}{e_0})^2+(\frac{x_1}{e_1})^2+(\frac{x_2}{e_2})^2=1 \tag{26} (e0x0)2+(e1x1)2+(e2x2)2=1(26)

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

( P − C ) T M ( P − C ) = 1 (27) (\mathbf{P}-\mathbf{C})^T M(\mathbf{P}-\mathbf{C})=1\tag{27} (PC)TM(PC)=1(27)

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

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

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

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

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

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

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

∂ F ∂ θ = 2 ( X ( θ , ϕ ) − Y ) ⋅ ∂ X ∂ θ = 0 , ∂ F ∂ ϕ = 2 ( X ( θ , ϕ ) − Y ) ⋅ ∂ X ∂ ϕ = 0 (29) \frac{\partial F}{\partial \theta}=2(\mathbf{X}(\theta, \phi)-\mathbf{Y}) \cdot \frac{\partial \mathbf{X}}{\partial \theta}=0, \quad \frac{\partial F}{\partial \phi}=2(\mathbf{X}(\theta, \phi)-\mathbf{Y}) \cdot \frac{\partial \mathbf{X}}{\partial \phi}=0\tag{29} θF=2(X(θ,ϕ)Y)θX=0,ϕF=2(X(θ,ϕ)Y)ϕX=0(29)

一阶导数为0,则 ( X ( θ , ϕ ) − Y ) (\mathbf{X}(\theta, \phi)-\mathbf{Y}) (X(θ,ϕ)Y)一定与 ∂ X ∂ θ , ∂ X ∂ ϕ \frac{\partial \mathbf{X}}{\partial \theta},\frac{\partial \mathbf{X}}{\partial \phi} θX,ϕX垂直.这说明点 Y \mathbf{Y} Y 到最近的点 X \mathbf{X} X所连接成的向量是这里的平面的法向量.

使用椭球的隐函数形式, G ( x 0 , x 1 , x 2 ) = ( x 0 / e 0 ) 2 + ( x 1 / e 1 ) 2 ( x 2 / e 2 ) 2 − 1 = 0 G(x_0,x_1,x_2)=(x_0/e_0)^2+(x_1/e_1)^2(x_2/e_2)^2-1=0 G(x0,x1,x2)=(x0/e0)2+(x1/e1)2(x2/e2)21=0, G ( x 0 , x 1 , x 2 ) G(x_0,x_1,x_2) G(x0,x1,x2)处的梯度就是点 ( x 0 , x 1 , x 2 ) (x_0,x_1,x_2) (x0,x1,x2) 处的法向量.则有 ( y 0 , y 1 , y 2 ) − ( x 0 , x 1 , x 2 ) = t ∇ G ( x 0 , x 1 , x 2 ) / 2 = t ( x 0 / e 0 2 , x 1 / e 1 2 , x 2 / e 2 2 ) (y_0,y_1,y_2)-(x_0,x_1,x_2)=t\nabla G(x_0,x_1,x_2)/2=t(x_0/e_0^2,x_1/e_1^2,x_2/e_2^2) (y0,y1,y2)(x0,x1,x2)=tG(x0,x1,x2)/2=t(x0/e02,x1/e12,x2/e22), 也即

y 0 = x 0 ( 1 + t e 0 2 ) , y 1 = x 1 ( 1 + t e 1 2 ) , y 2 = x 2 ( 1 + t e 2 2 ) (30) y_0 = x_0(1+\frac{t}{e_0^2}),y_1 = x_1(1+\frac{t}{e_1^2}),y_2 = x_2(1+\frac{t}{e_2^2})\tag{30} y0=x0(1+e02t),y1=x1(1+e12t),y2=x2(1+e22t)(30)

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

球的情况

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

Oblate的情况

如果 e 0 = e 1 > e 2 e_0=e_1>e_2 e0=e1>e2,则椭球为一个Oblate球.取 r = x 0 2 + x 1 2 r=\sqrt{x_0^2+x_1^2} r=x02+x12 ,标准椭圆方程在 ( r , x 2 ) − (r,x_2)- (r,x2)平面上退化成为 ( x 0 2 + x 1 2 ) / e 0 2 + x 2 2 / e 2 2 = 1 (x_0^2+x_1^2)/e_0^2+x_2^2/e_2^2=1 (x02+x12)/e02+x22/e22=1.用映射 ( y 0 , y 1 , y 2 ) → ( y 0 2 + y 1 2 , y 2 ) (y_0,y_1,y_2)\rightarrow(\sqrt{y_0^2+y_1^2},y_2) (y0,y1,y2)(y02+y12 ,y2)并在椭圆上讨论这一问题.

Prolate的情况

如果 e 0 > e 1 = e 2 e_0>e_1=e_2 e0>e1=e2,则椭球为一个Prolate球.取 r = x 1 2 + x 2 2 r=\sqrt{x_1^2+x_2^2} r=x12+x22 ,标准椭圆方程在 ( x 0 , r ) − (x_0,r)- (x0,r)平面上退化成为 x 0 2 / e 0 2 + ( x 1 2 + x 2 2 ) / e 1 2 = 1 x_0^2/e_0^2+(x_1^2+x_2^2)/e_1^2=1 x02/e02+(x12+x22)/e12=1.用映射 ( y 0 , y 1 , y 2 ) → ( y 0 , y 1 2 + y 2 2 ) (y_0,y_1,y_2)\rightarrow(y_0,\sqrt{y_1^2+y_2^2}) (y0,y1,y2)(y0,y12+y22 )并在椭圆上讨论这一问题.

本部分主要讨论椭球的问题.因此假设 e 0 > e 1 > e 2 e_0>e_1>e_2 e0>e1>e2,并在第一卦限讨论.

目标点是原点

方程(30)变为 0 = x i ( 1 + t / e i 2 ) , i = 0 , 1 , 2. 0=x_{i}\left(1+t / e_{i}^{2}\right),i=0,1,2. 0=xi(1+t/ei2),i=0,1,2..与椭圆的讨论类似,共有8种情况需要考虑.首先排除掉 x 0 = x 1 = x 2 = 0 x_0=x_1=x_2=0 x0=x1=x2=0和同时满足两个 t = − e i 2 , t = − e j 2 , i ≠ j t=-e_i^2,t=-e_j^2,i\ne j t=ei2,t=ej2,i=j的情况,只剩下三个情况 ( e 0 , 0 , 0 ) , ( 0 , e 1 , 0 ) , ( 0 , 0 , e 2 ) (e_0,0,0),(0,e_1,0),(0,0,e_2) (e0,0,0),(0,e1,0),(0,0,e2),显然最近距离为 d = e 2 d=e_2 d=e2.

目标点 y 2 > 0 y_2>0 y2>0

方程(30)变为 y 2 = x 2 ( 1 + t / e 2 2 ) . y_2=x_{2}\left(1+t / e_{2}^{2}\right). y2=x2(1+t/e22). 由于 y 2 > 0 y_2>0 y2>0,寻找的最近点在第一卦限,必须有 x 2 > 0 , 1 + t / e 2 2 > 0 x_2>0,1+t/e_2^2>0 x2>0,1+t/e22>0.考虑 y 0 , y 1 y_0,y_1 y0,y1分别为0或者正时,共考虑4种情况

  1. y 0 = 0 , y 1 = 0 则有 0 = x 0 ( 1 + t / e 2 2 ) , 0 = x 1 ( 1 + t / e 1 2 ) , 如果 x 0 > 0 , 则有 t = − e 0 2 , y 2 = x 2 ( 1 − e 0 2 / e 1 2 ) < 0 , 矛盾,相似的, x 1 > 0 矛盾,因此最近点为 ( x 0 , x 1 , x 2 ) = ( 0 , 0 , e 2 ) y_0=0,y_1=0 \text{则有}0=x_{0}\left(1+t / e_{2}^{2}\right),0=x_{1}\left(1+t / e_{1}^{2}\right),\text{如果}x_0>0,\text{则有}t=-e_0^2,y_2=x_2(1-e_0^2/e_1^2)<0,\text{矛盾,相似的,}x_1>0\text{矛盾,因此最近点为}(x_0,x_1,x_2) = (0,0,e_2) y0=0,y1=0则有0=x0(1+t/e22),0=x1(1+t/e12),如果x0>0,则有t=e02,y2=x2(1e02/e12)<0,矛盾,相似的,x1>0矛盾,因此最近点为(x0,x1,x2)=(0,0,e2)

  2. y 0 > 0 , y 1 = 0 则有 y 0 = x 0 ( 1 + t / e 2 2 ) , 则 x 1 = 0 , 则问题退化为在椭圆上的问题,即求点 ( y 0 , y 2 ) 到 ( x 0 / e 0 ) 2 + ( x 2 / e 2 ) 2 = 1 的距离 y_0>0,y_1=0 \text{则有}y_0=x_{0}\left(1+t / e_{2}^{2}\right),\text{则}x_1=0,\text{则问题退化为在椭圆上的问题,即求点}(y_0,y_2)\text{到}(x_0/e_0)^2+(x_2/e_2)^2=1\text{的距离} y0>0,y1=0则有y0=x0(1+t/e22),x1=0,则问题退化为在椭圆上的问题,即求点(y0,y2)(x0/e0)2+(x2/e2)2=1的距离

  3. y 0 = 0 , y 1 > 0 则有 y 1 = x 1 ( 1 + t / e 2 2 ) , 则 x 0 = 0 , 则问题退化为在椭圆上的问题,即求点 ( y 1 , y 2 ) 到 ( x 1 / e 1 ) 2 + ( x 2 / e 2 ) 2 = 1 的距离 y_0=0,y_1>0 \text{则有}y_1=x_{1}\left(1+t / e_{2}^{2}\right),\text{则}x_0=0,\text{则问题退化为在椭圆上的问题,即求点}(y_1,y_2)\text{到}(x_1/e_1)^2+(x_2/e_2)^2=1\text{的距离} y0=0,y1>0则有y1=x1(1+t/e22),x0=0,则问题退化为在椭圆上的问题,即求点(y1,y2)(x1/e1)2+(x2/e2)2=1的距离

  4. y 0 > 0 , y 1 > 0 y_0>0,y_1>0 y0>0,y1>0,则方程(30})解为 x i = e i 2 y i / ( t + e i 2 ) , i = 0 , 1 , 2 x_i=e_i^2y_i/(t+e_i^2),i=0,1,2 xi=ei2yi/(t+ei2),i=0,1,2.与前面椭圆的解法类似.将 x i x_i xi带入(26)得到
    F ( t ) = ( e 0 y 0 t + e 0 2 ) 2 + ( e 1 y 1 t + e 1 2 ) 2 + ( e 2 y 2 t + e 2 2 ) 2 − 1 = 0 (31) 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}+\left(\frac{e_{2} y_{2}}{t+e_{2}^{2}}\right)^{2}-1=0 \tag{31} F(t)=(t+e02e0y0)2+(t+e12e1y1)2+(t+e22e2y2)21=0(31)
    此函数 F ( t ) F(t) F(t)的定义域为 t ∈ ( − e 2 2 , ∞ ) t\in(-e_2^2,\infty) t(e22,).椭球上最近一点 ( x 0 , x 1 , x 2 ) (x_0,x_1,x_2) (x0,x1,x2) F ( t ) = 0 F(t)=0 F(t)=0的根给出.

    一阶、二阶导数分别为
    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 − 2 e 2 2 y 2 2 ( t + e 2 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 + 6 e 2 2 y 2 2 ( t + e 2 2 ) 4 (32) 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}}-\frac{2 e_{2}^{2} y_{2}^{2}}{\left(t+e_{2}^{2}\right)^{3}},\\ 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}}+\frac{6 e_{2}^{2} y_{2}^{2}}{\left(t+e_{2}^{2}\right)^{4}} \tag{32} F(t)=(t+e02)32e02y02(t+e12)32e12y12(t+e22)32e22y22,F(t)=(t+e02)46e02y02+(t+e12)46e12y12+(t+e22)46e22y22(32)
    y 0 > 0 , y 1 > 0 , y 2 > 0 , t > − e 2 2 , F ′ ( t ) < 0 , F ′ ′ ( t ) > 0 y_0>0,y_1>0,y_2>0,t>-e_2^2,F^{\prime}(t)<0,F^{\prime\prime}(t)>0 y0>0,y1>0,y2>0,t>e22,F(t)<0,F(t)>0,又由于 lim ⁡ t → − e 2 2 + F ( t ) = + ∞ , lim ⁡ t → ∞ F ( t ) = − 1 \lim _{t \rightarrow-e_{2}^{2+}} F(t)=+\infty, \lim _{t \rightarrow \infty} F(t)=-1 limte22+F(t)=+,limtF(t)=1
    F ( t ) F(t) F(t)是一个关于 t t t的严格递减函数,函数值首先为正、然后变成负数,因此必定有唯一零点.
    在这里插入图片描述
    可以发现定义域中包含了0,而且 F ( 0 ) = ( y 0 / e 0 ) 2 + ( y 1 / e 1 ) 2 + ( y 2 / e 2 ) 2 F(0)=(y_0/e_0)^2+(y_1/e_1)^2+(y_2/e_2)^2 F(0)=(y0/e0)2+(y1/e1)2+(y2/e2)2, ( y 0 , y 1 , y 2 ) (y_0,y_1,y_2) (y0,y1,y2)在椭球内时 F ( 0 ) < 0 , t ˉ < 0 F(0)<0,\bar{t}<0 F(0)<0,tˉ<0,在椭球外时 F ( 0 ) > 0 , t ˉ > 0 F(0)>0,\bar{t}>0 F(0)>0,tˉ>0,在椭球上时 F ( 0 ) = 0 , t ˉ = 0 F(0)=0,\bar{t}=0 F(0)=0,tˉ=0

目标点 y 2 = 0 y_2=0 y2=0

与椭圆中“点在x轴上”类似.方程(30)转化为 y 0 = x 0 ( 1 + t / e 0 2 ) , y 1 = x 1 ( 1 + t / e 1 2 ) , 0 = x 2 ( 1 + t / e 2 2 ) y_0=x_0(1+t/e_0^2),y_1=x_1(1+t/e_1^2),0=x_2(1+t/e_2^2) y0=x0(1+t/e02),y1=x1(1+t/e12),0=x2(1+t/e22).最后一个方程有两种情况

  • x 2 = 0 x_2=0 x2=0.为了使 ( x 0 , x 1 , 0 ) (x_0,x_1,0) (x0,x1,0)在椭球上,则有 ( x 0 / e 0 ) 2 + ( x 1 / e 1 ) 2 = 1 (x_0/e_0)^2+(x_1/e_1)^2=1 (x0/e0)2+(x1/e1)2=1,降维至二维椭圆问题.
  • x 2 > 0 x_2>0 x2>0,则有 t = − e 2 2 t=-e_2^2 t=e22,带入可得: y 0 = x 0 ( 1 − e 2 2 / e 0 2 ) , y 1 = x 0 ( 1 − e 2 2 / e 1 2 ) y_0=x_0(1-e_2^2/e_0^2),y_1=x_0(1-e_2^2/e_1^2) y0=x0(1e22/e02),y1=x0(1e22/e12).
    由于 ( x 0 , x 1 , x 2 ) (x_0,x_1,x_2) (x0,x1,x2)在椭球上, 1 ≥ 1 − ( x 2 e 2 ) 2 = ( x 0 e 0 ) 2 + ( x 1 e 1 ) 2 = ( e 0 y 0 e 0 2 − e 2 2 ) 2 + ( e 1 y 1 e 1 2 − e 2 2 ) 2 (34) 1\geq 1-(\frac{x_2}{e_2})^2 = (\frac{x_0}{e_0})^2+(\frac{x_1}{e_1})^2 = (\frac{e_0y_0}{e_0^2-e_2^2})^2+(\frac{e_1y_1}{e_1^2-e_2^2})^2\tag{34} 11(e2x2)2=(e0x0)2+(e1x1)2=(e02e22e0y0)2+(e12e22e1y1)2(34)此不等式表明 ( y 0 , y 1 ) (y_0,y_1) (y0,y1)包含在一个 半椭球上的 x 0 x 1 _ 域子椭圆 \textbf{半椭球上的}x_0x_1\_\textbf{域子椭圆} 半椭球上的x0x1_域子椭圆
    ( y 0 , y 1 ) (y_0,y_1) (y0,y1)在子椭圆外,最近的点需要在椭圆 ( x 0 / e 0 ) 2 + ( x 1 / e 1 ) 2 = 1 (x_0/e_0)^2+(x_1/e_1)^2=1 (x0/e0)2+(x1/e1)2=1
    ( y 0 , y 1 ) (y_0,y_1) (y0,y1)在子椭圆内,为了使 ( x 0 , x 1 , x 2 ) (x_0,x_1,x_2) (x0,x1,x2)在椭球上,解得 x 2 = e 2 1 − ( x 0 / e 0 ) 2 − ( x 1 / e 1 ) 2 x_2=e_2\sqrt{1-(x_0/e_0)^2-(x_1/e_1)^2} x2=e21(x0/e0)2(x1/e1)2

至此 讨论结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值