在解析几何中, 一条直线与一个平面的交点可能是空集、一个点或一条直线。在计算机图形学、运动规划和碰撞检测中,经常需要分析相交类型,以及计算出点坐标或线的方程。
代数形式
空间中一个平面可以表示为点 \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}.
应用
在计算机图形学中的光线追踪算法中,一个面可以被表示为几个平面的集合。一个面的图像可以用光线与每个面的交点表达。在基于视觉的三维重建中(计算机视觉的一个子场),深度通常是由“三角测量法”测算的。
外部链接
- [http://geomalgorithms.com/a05-_intersect-1.html Intersections of Lines, Segments and Planes (2D & 3D) from GeomAlgorithms.com]
评论 (0)