向量操作(空间距离、夹角)

在实际编程中,直线是用两个点来表示的;平面是用三个点来表示的。所以需要直到常见的表示法,及对应的距离夹角计算。

向量的叉乘

在计算机图形学中,向量叉乘的应用广泛。比如,判断线段的相对位置,线段相交,点在多边形内,求凸包
仅在三维空间,两个向量的叉积才有定义,记作 u ^ v
定义为:u^v= ||u|| ||v|| sin(θ)n其中,θ表示uv的夹角, ||u|| 和 ||v|| 分别是向量uv的模,n则是uv所构成平面的法向(垂直于uv平面的单位向量),方向由右手定则决定。
计算叉乘方式如下:
为基向量,为三维坐标系的 方向的单位向量。

叉乘的几何意义——包围的面积

  • |c|=|a×b|=|a| |b|sinα (α为a,b向量之间的夹角)
  • |c| = a,b向量构成的平行四边形的面积 (如下图所示的平行四边形)
notion imagenotion image

应用——判断两条线段的相对位置

在计算机图形学中,向量叉乘的应用广泛。比如,判断线段的相对位置,线段相交,点在多边形内,求凸包等。
判断两条线段的相对位置
notion imagenotion image
在二维平面上有两条线段,分别是AB和AC,如何通过向量叉积来确定他们的相对位置关系。
点A、B、C的坐标为A(x_a,y_a),B(x_b,y_b),C(x_c, y_c)。首先构造两个向量AB和AC,
notion imagenotion image
由于二维空间不存在叉积的定义,所以引入z轴,将向量AB、AC扩展到三维空间,可以将二位向量可看作 z 轴恒为 0 的三维向量,
那么,两个向量叉积的则可表示为:
k 为z轴方向单位向量,res 为长度。
  • 当res > 0, AC在AB的逆时针方向
  • 当res = 0, AB和AC共线
  • 当res < 0, AC在AB的顺时针方向
注:以上关系不用刻意记忆,可以使用右手法则判断。大拇指向下的,res 就小于0,大拇指向上的,res就大于0。(因为叉乘得到的法向量本来就是可以通过右手法则判断的)

点到直线距离

 

点到平面距离