平面的方程
设位于平面P上的某个点为\( \vec p_{0} \)(已知量),平面P的法向量为\( \vec n \)(已知量),该平面P的任意一点设为\( \vec p \),则平面P的方程为:
\[ (\vec p - \vec p_{0} )\cdot \vec n = 0 \]
使得这个方程成立的原理是,位于平面P上的任意一个向量\( (\vec p - \vec p_{0} ) \),必然和平面P的法向量垂直,互相垂直的向量的点积必然为0。
直线的方程
设位于直线上的某个点为\( \vec o \)(已知量),直线的方向向量为\( \vec d \)(已知量),直线上的任意一点为\( \vec p \),则直线的方程为:
\[ \vec p = \vec o + t\vec d, t\in R \]
注意,式子右边的t是一个Scalar(一个实数标量),这个t决定了\(\vec p\)的位置。
直线与平面的相交
直线与平面的相交,必然是一个点。将上面的直线方程代入平面方程,得到:
\[ ( \vec o + t\vec d - \vec p_{0} )\cdot \vec n = 0 \]
其中,\( \vec o 、\vec d 、\vec p_{0} 、\vec n \)都是已知量,只有t是未知量,所以求直线与平面的相交点等同于求t的值。
化简这个式子,得到:
\[ t\vec d \cdot \vec n + (\vec o - \vec p_{0} )\cdot \vec n = 0 \]
\[ t\vec d \cdot \vec n = ( \vec p_{0} - \vec o )\cdot \vec n \]
\[ t = \frac { ( \vec p_{0} - \vec o )\cdot \vec n }{ \vec d \cdot \vec n } \]
实例 (基于三维坐标系)
本小节的实例是结合实际需求设计的。在3D图形学中,直线与平面相交算法一般是应用到了光线与包围盒的相交判定问题中。
那么下面就设直线为任意直线(光线都是任意方向的),而平面设为某几种特定的特殊平面,来展示上面的算法的流程。
1. 法向量为\(