椭球面系列---射线与椭球面的交点

发布时间:2023年12月25日

射线与椭球体的交点问题的求解是一个非常常见和经典的问题,本文给出具体的计算原理和矩阵表达的过程,便于编程计算。

见下图,已知射线(点为 p 0 \textbf{p}_0 p0?,单位方向为 d \textbf{d} d),那么与椭球面的交点 p \textbf{p} p) 的笛卡尔坐标。

在继续计算前,记住之前我们的假设:椭球面和直线等坐标都是在椭球为中心的笛卡尔坐标系下。

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

射线与椭球体的交点

首先,射线上任意一点 p \textbf{p} p p 0 \textbf{p}_0 p0?的距离为 t t t,则 p \textbf{p} p可表示为:
p = p 0 + t d \begin{equation} \textbf{p}=\textbf{p}_0+t\textbf{d} \end{equation} p=p0?+td??

p \textbf{p} p在椭球面上,则需满足椭球面方程:
p T Cp = 1 \textbf{p}^T\textbf{C}\textbf{p}=1 pTCp=1

则有:
( p 0 + t d ) T C ( p 0 + t d ) = 1 (\textbf{p}_0+t\textbf{d})^T\textbf{C}(\textbf{p}_0+t\textbf{d})=1 (p0?+td)TC(p0?+td)=1
化简可得:
( d T Cd ) t 2 + 2 ( p 0 T Cd ) t + p 0 T C p 0 ? 1 = 0 ? (\textbf{d}^T\textbf{C}\textbf{d})t^2+2(\textbf{p}_0^T\textbf{C}\textbf{d})t+\textbf{p}_0^T\textbf{C}\textbf{p}_0-1=0 ? (dTCd)t2+2(p0T?Cd)t+p0T?Cp0??1=0?
上式为典型的关于 t t t的一元二次方程:
a t 2 + b t + c = 0 at^2+bt+c=0 at2+bt+c=0
其中:
{ a = d T Cd b = 2 p 0 T Cd c = p 0 T C p 0 ? 1 \begin{cases} a=\textbf{d}^T\textbf{C}\textbf{d} \\ b=2\textbf{p}_0^T\textbf{C}\textbf{d} \\ c=\textbf{p}_0^T\textbf{C}\textbf{p}_0-1 \end{cases} ? ? ??a=dTCdb=2p0T?Cdc=p0T?Cp0??1?
最终得到距离 t t t的解(最多2个解):
t = ? b ± b 2 ? 4 a c 2 a t = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} t=2a?b±b2?4ac ??

显然:

  1. b 2 ? 4 a c > 0 b^2 - 4ac>0 b2?4ac>0时,表示射线与椭球面有两个交点。

  2. b 2 ? 4 a c = 0 b^2 - 4ac=0 b2?4ac=0时,表示射线与椭球面相切。

  3. b 2 ? 4 a c < 0 b^2 - 4ac<0 b2?4ac<0时,表示射线与椭球面不相交。

t t t求得后,带入式(1)即可得到 p \textbf{p} p点的坐标。

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