计算几何中的对象可以是点集,线段集,面集等。如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段 (directed segment) 。如果有向线段 p1p2 的起点 p1 在坐标原点,我们可以把它称为向量/矢量 (vector)p2 。
矢量运算:
在计算几何问题中,经常要用到矢量的运算。设二维矢量 P = ( x1, y1 ) , Q = ( x2 , y2 ) ,则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ) ,同样的,矢量减法定义为: P - Q = ( x1 - x2 , y1 - y2 ) 。显然有性质 P + Q = Q + P , P - Q = - ( Q - P ) 。
矢量点乘(dot product) 也叫做向量内积(inner product). 设三维空间中两个向量,P(a1,a2,a3) , Q(b1,b2,b3), P·Q = a1b1 + a2b2 + a3b3. 几何意义是|P||Q| cos(PQ夹角)。
两向量点乘为0时,即这两向量互相垂直
矢量叉积(cross product) 设矢量 P = ( x1, y1 ) , Q = ( x2, y2 ) ,则矢量叉积定义为由 (0,0) 、 p1 、 p2 和 p1+p2 所组成的平行四边形的带符号的面积,即: P × Q = x1*y2 - x2*y1 ,其结果是一个标量(更高维数的叉积参阅数学书),几何意义为|P||Q| sin(PQ夹角)。显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q ) 。一般在不加说明的情况下,下述算法中所有的点都看作矢量,两点的加减法就是矢量相加减,而点的乘法则看作矢量叉积。
叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:若P×Q > 0 , 则P在Q的顺时针方向。若小于0, 为逆时针。若等于0, 可能同向/反向。
判断点在线段上
设点为 Q ,线段为 AB ,判断点 Q 在直线上的依据是∠QAB = 0或180: ( Q - A ) × ( B - A ) = 0。再判断点是否在线段内,min(xA,xB) <= xQ <= max(xA,xB)且min(yA,yB) <= yQ <= max(yA,yB)。(考虑垂直和水平线段,所以要两个条件同时成立).