线面交点

在解析几何中, 一条直线与一个平面的交点可能是空集、一个点或一条直线。在计算机图形学、运动规划和碰撞检测中,经常需要分析相交类型,以及计算出点坐标或线的方程。

代数形式
空间中一个平面可以表示为点 \mathbf{p} 的集合

:(\mathbf{p}-\mathbf{p_0})\cdot\mathbf{n} = 0

其中 \mathbf{n} 是该平面的法线,\mathbf{p_0}是平面上任意一点。(\mathbf{a}\cdot\mathbf{b}表示向量 \mathbf{a} 和 \mathbf{b} 的数量积)

而直线可表示为

:\mathbf{p} = d\mathbf{l} + \mathbf{l_0} \quad d\in\mathbb{R}

其中 \mathbf{l}是该直线的方向向量,\mathbf{l_0}是直线上任意一点,d是实数范围内的标量。将直线方程代入平面方程得

:(d \mathbf{l} + \mathbf{l_0} - \mathbf{p_0})\cdot\mathbf{n} = 0

展开得

:d \mathbf{l}\cdot\mathbf{n} + (\mathbf{l_0}-\mathbf{p_0})\cdot\mathbf{n} = 0

解得 d

:d = {(\mathbf{p_0}-\mathbf{l_0})\cdot\mathbf{n} \over \mathbf{l}\cdot\mathbf{n}}.

若 \mathbf{l}\cdot\mathbf{n} = 0,则直线与平面平行。此时,如果(\mathbf{p_0}-\mathbf{l_0})\cdot\mathbf{n} =0,则该直线在平面内,即直线上所有的点都是交点。否则,直线与平面没有交点。

若 \mathbf{l}\cdot\mathbf{n} \ne 0,则直线与平面有且只有一个交点。解得 d,则交点的坐标为

:d\mathbf{l} + \mathbf{l_0}.

参数形式
空间中一条直线可以用一个点和一个给定的方向来描述。则一条直线可以表示为如下点的集合

:\mathbf{l}_a + (\mathbf{l}_b - \mathbf{l}_a)t, \quad t\in \mathbb{R}

其中 \mathbf{l}_a=(x_a, y_a, z_a) 和 \mathbf{l}_b=(x_b, y_b, z_b) 是直线上两个不同的点。

相似地,一个平面可以表示为如下点的集合

:\mathbf{p}_0 + (\mathbf{p}_1-\mathbf{p}_0)u + (\mathbf{p}_2-\mathbf{p}_0)v, \quad u,v\in\mathbb{R}

其中 \mathbf{p}_k=(x_k,y_k,z_k),k=0,1,2 是平面上不共线的三个点。

直线和平面的交点可以表示为将直线上的点代入平面方程内,则参数方程如下:

:\mathbf{l}_a + (\mathbf{l}_b - \mathbf{l}_a)t = \mathbf{p}_0 + (\mathbf{p}_1-\mathbf{p}_0)u + (\mathbf{p}_2-\mathbf{p}_0)v

:\mathbf{l}_a - \mathbf{p}_0 = (\mathbf{l}_a - \mathbf{l}_b)t + (\mathbf{p}_1-\mathbf{p}_0)u + (\mathbf{p}_2-\mathbf{p}_0)v,

用矩阵表示为

: \begin{bmatrix} x_a - x_0 \\ y_a - y_0 \\ z_a - z_0 \end{bmatrix} = \begin{bmatrix} x_a - x_b & x_1 - x_0 & x_2 - x_0 \\ y_a - y_b & y_1 - y_0 & y_2 - y_0 \\ z_a - z_b & z_1 - z_0 & z_2 - z_0 \end{bmatrix} \begin{bmatrix} t \\ u \\ v \end{bmatrix}

可得点的坐标为
:\mathbf{l}_a + (\mathbf{l}_b - \mathbf{l}_a)t

若直线与平面平行或在平面内,那么向量 \mathbf{l}_b - \mathbf{l}_a,\mathbf{p}_1-\mathbf{p}_0 及 \mathbf{p}_2-\mathbf{p}_0是线性独立的,且矩阵为奇异矩阵。

若满足 t \in [0,1],则交点在直线上 \mathbf{l}_a 与 \mathbf{l}_b 之间。

若满足
:u,v \in [0,1], \;\;\; (u+v) \leq 1,
则交点位于平面上 \mathbf{p}_0,\mathbf{p}_1 及 \mathbf{p}_2所构成的三角形中。

该问题可用矩阵的形式表示解答:
: \begin{bmatrix} t \\ u \\ v \end{bmatrix} = \begin{bmatrix} x_a - x_b & x_1 - x_0 & x_2 - x_0 \\ y_a - y_b & y_1 - y_0 & y_2 - y_0 \\ z_a - z_b & z_1 - z_0 & z_2 - z_0 \end{bmatrix}^{-1} \begin{bmatrix} x_a - x_0 \\ y_a - y_0 \\ z_a - z_0 \end{bmatrix}.

应用
在计算机图形学中的光线追踪算法中,一个面可以被表示为几个平面的集合。一个面的图像可以用光线与每个面的交点表达。在基于视觉的三维重建中(计算机视觉的一个子场),深度通常是由“三角测量法”测算的。

外部链接

评论 (0)

  • 还没有评论,来抢沙发吧。