椭球面系列---椭球面上离直线最近的点

发布时间:2023年12月26日

前面给出了射线与椭球体的交点问题的求解,本节讨论当射线与椭球面无交点时,那么在椭球面上离射线最近的点在那里?

本文给出具体的计算原理和矩阵表达的过程,便于编程计算。

有关椭圆的基础性质,请参考椭球面系列—基本性质

见下图,已知射线(点为 p 0 \textbf{p}_0 p0?,单位方向为 d \textbf{d} d),令射线与椭球面最近的点为 p \textbf{p} p,对应的椭球面上的点为 r \textbf{r} r,如何确定 p \textbf{p} p r \textbf{r} r的笛卡尔坐标?
?直线与椭球面的最近距离

首先不加证明的给出几个基本性质:

  1. 由点 p 0 \textbf{p}_0 p0?出发的射线和椭球体中心组成的平面与椭球体的截面为椭圆(上图即为截面内的射线和对应的椭圆,注意此椭圆的半长轴和半短轴未知,但是我们用不到)。
  2. 由于椭球面为凸面体,所以椭球面上离直线最近的点必定位于此截面内。
  3. 点到直线的距离最短为点到直线的垂线,因此 r ? p \textbf{r}-\textbf{p} r?p必定垂直于直线。
  4. 过椭球面上最近点 r \textbf{r} r的切平面必定垂直于上述的截面,也就是说切平面的法向量(椭球面法向量)垂直于直线。

综合以上性质,我们可以知道,利用射线可以求得截面内垂直于射线的向量 n \textbf{n} n,也就是椭球面在 r \textbf{r} r点处的法线向量(切平面法向量)。

首先,求解向量 n \textbf{n} n,可由下式给出:
n = ? d × ( d × p 0 ) \begin{equation} \textbf{n}=-\textbf{d}\times(\textbf{d}\times\textbf{p}_0) \end{equation} n=?d×(d×p0?)??
椭球面系列—基本性质一文中,我们给出了椭球面的法线基本性质,可得:
k 2 = n T C ? 1 n \begin{equation} k^2=\textbf{n}^T\textbf{C}^{-1}\textbf{n} \end{equation} k2=nTC?1n??
那么椭球面上离直线最近的点 r \textbf{r} r可由下式给出:
r = 1 k C ? 1 n \begin{equation} \textbf{r}=\frac1k\textbf{C}^{-1}\textbf{n} \end{equation} r=k1?C?1n??

下面我们再给出直线上距离椭球面最近的点 p \textbf{p} p的求解。由前面给出的几条性质可知, r ? p \textbf{r}-\textbf{p} r?p是垂直于直线的。因此将 r ? p 0 \textbf{r}-\textbf{p}_0 r?p0?投影到直线方向上可得到距离 t t t
t = ( r ? p 0 ) ? d \begin{equation} t=(\textbf{r}-\textbf{p}_0)\cdot\textbf{d} \end{equation} t=(r?p0?)?d??
那么射线上距离椭球面最近点 p \textbf{p} p可表示为:
p = p 0 + t d \begin{equation} \textbf{p}=\textbf{p}_0+t\textbf{d} \end{equation} p=p0?+td??

上图推导过程中虽然依赖射线,但是整个过程都是与直线相关的,也就是说,射线的方向不影响结论。见下图,射线的方向 d \textbf{d} d相反,但是最终的结论都是求得直线上离椭球面最近点。

直线与椭球面最近距离2
实际编程计算时需要考虑射线情况时,对于上图右图情形,显然射线方向离椭球体距离越来越远,最近点即为 p 0 \textbf{p}_0 p0?,用公式表达为:
p 0 ? d > 0 \textbf{p}_0\cdot\textbf{d}>0 p0??d>0

另外一种情形,在向量 n \textbf{n} n的求解中用到向量的叉乘,如果 p 0 \textbf{p}_0 p0? d \textbf{d} d在一条直线上时则叉乘结果为0,此时对应射线指向椭球圆心,即射线与椭球面相交,那么可使用"射线与椭球面的交点"计算,而不是使用本算法计算。

参考:
[1]: Point on an ellipsoid closest to line

文章来源:https://blog.csdn.net/u011575168/article/details/135212894
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。