向量操作(空间距离、夹角)
在实际编程中,直线是用两个点来表示的;平面是用三个点来表示的。所以需要直到常见的表示法,及对应的距离夹角计算。
向量的叉乘
在计算机图形学中,向量叉乘的应用广泛。比如,判断线段的相对位置,线段相交,点在多边形内,求凸包
仅在三维空间,两个向量的叉积才有定义,记作 u ^ v
定义为:u^v= ||u|| ||v|| sin(θ)n其中,θ表示u和v的夹角, ||u|| 和 ||v|| 分别是向量u和v的模,n则是u、v所构成平面的法向(垂直于u、v平面的单位向量),方向由右手定则决定。
计算叉乘方式如下:
为基向量,为三维坐标系的 方向的单位向量。
叉乘的几何意义——包围的面积
- |c|=|a×b|=|a| |b|sinα (α为a,b向量之间的夹角)
- |c| = a,b向量构成的平行四边形的面积 (如下图所示的平行四边形)

应用——判断两条线段的相对位置
在计算机图形学中,向量叉乘的应用广泛。比如,判断线段的相对位置,线段相交,点在多边形内,求凸包等。
判断两条线段的相对位置

在二维平面上有两条线段,分别是AB和AC,如何通过向量叉积来确定他们的相对位置关系。
点A、B、C的坐标为A(x_a,y_a),B(x_b,y_b),C(x_c, y_c)。首先构造两个向量AB和AC,

由于二维空间不存在叉积的定义,所以引入z轴,将向量AB、AC扩展到三维空间,可以将二位向量可看作 z 轴恒为 0 的三维向量,
那么,两个向量叉积的则可表示为:
k 为z轴方向单位向量,res 为长度。
- 当res > 0, AC在AB的逆时针方向
- 当res = 0, AB和AC共线
- 当res < 0, AC在AB的顺时针方向
注:以上关系不用刻意记忆,可以使用右手法则判断。大拇指向下的,res 就小于0,大拇指向上的,res就大于0。(因为叉乘得到的法向量本来就是可以通过右手法则判断的)