转自http://www.cppblog.com/shiming413/archive/2007/08/21/30494.html

一、点。

l 点的坐标A(x1, y1),B(x2, y2)

二、向量。

l 向量AB = (x2-x1, y2-y1) = (x3,y3) ,CD = (x4, y4)。

l 向量的模|AB| = sqrt(x3*x3 + y3*y3) 即向量的长度。

三、点积。

l 点积的结果为一个数值。

l 数值计算方法AB * CD = x3*x4 + y3*y4。

l 几何意义AB * CD = |AB| * |CD| * cos(a),a为向量AB逆时针转向CD的角度,0<=a<360,也可以认为是两向量的夹角,0<=a<=180。一般用于求夹角,a = acos( (AB * CD) / (|AB| * |CD|) )。也可:|CD| * cos(a) = AB * CD / |AB|,即向量CD在AB上的投影。

四、叉积。

l 叉积的结果为一个向量。

l AB×CD数值= x3*y4 – x4*y3。

l 方向由右手螺旋定则判定。

l 几何意义:AB×CD = |AB| * |CD| * sin(a),取绝对值即是以AB和CD为边的平行四边形面积。

五、线段相交的判定(判定线段AB和线段CD是否相交,属于哪种相交)。

l 规范相交:交点只有一个,且不是线段的端点。

1、充要条件:点A和点B在CD的两侧并且点C和点D在AB的两侧。

2、如何判断点A在向量CD的左侧还是右侧:CA×CD的数值大于0则左侧,小于0则右侧。于是CA×CD的数值和CB×CD的数值异号,点A和点B在CD的两侧,同理可判断点C和点D是否在AB的两侧(注意,必须严格异号)。

l 不规范相交:交点为某个线段的端点,甚至两线段有一段重合。

1、充要条件,一条线段的一个端点在另一条线段上。即A在CD上或B在CD上或C在AB上或D在AB上。

2、A在线段CD上的充要条件:

a) AC×AD = 0,几何意义,AC和AD组成的平行四边形的面积为0,即A、C、D三点共线。

b) A点在CD之间,A.x处于C.x和D.x之间并且A.y处于C.y和D.y之间

10-09 04:56