向量点积、叉积的意义
1.向量点积意义
①二维向量A和B点积(结果为标量)定义为:A.dot(B) = |A|*|B|*cos(a)
比较重要的用途(数学意义)为:
②得到向量夹角。(根据cos(a)计算得到)
③得到对应单位分量上的长度。(当向量B为单位向量时,则|A|*cos(a)表示向量A在向量B上的单位分量)
可用于凸多边形的碰撞检测(分离轴定理)
2.向量叉积意义
①二维向量A和B叉积(结果为标量)定义为:A.cross(B) = |A|*|B|*sin(a)
比较重要的用途(数学意义)为:
②得到向量夹角。(根据sin(a)计算得到)
③得到的两个向量组成的三角形面积S=A.cross(B)/2
④得到两个向量之间的顺逆关系:> 0 表示 A在B的顺时针方向; <0表示A在B的逆时针方向; =0 表示则为共线向量(有可能同向,有可能反向);
⑤由上面两个向量之间的结果,从同一点出发的两个向量,就可以得到点和线之间的位置(点在线的左右或者在线上)关系。
可用于凸多边形的碰撞检测(射线检测):其核心的思路是,判断这个点,和多边形每条边的位置关系。在一个多条边围成的区域,点在一条边的右侧,这个点可能在多边形内部,也可能在外部。但是如果判断完点和每一条边的左右关系,如果在右边的边是奇数个,那么点就在内部,如果是偶数,那么点就在外部。通过这个规则,就可以判断,点和多边形的碰撞关系。有两个注意点,多边行必须是凸多边形,并且如果点落在边上,我们算在左边,这样落在边上是算在内部。
详情可参看《C 实现射线检测多边形碰撞》
3.三维向量叉积(结果为向量),得到一个垂直于另外两条向量所组成平面的向量。