点与线的关系

       项目中需要到判断点与线段的关系,发现使用向量外积来判断容易些,恶补了一下向量的知识。向量外积,又称叉积,是向量代数(解析几何)中的一个概念。两个向量v1(x1, y1)和v2(x2, y2)的外积v1×v2=x1y2-y1x2。如果由v1到v2是顺时针转动,外积为负,反之为正,为0表示二者方向相同(平行)。

 

向量的内积、点积、数量积

A·B = x1*x2+y1*y2 = |A||B|Cos(θ) 结果为一个数值。结果的正负由Cos(θ)正负决定,可以结果可以判断夹角

当结果为正时,表明2向量夹角为<90度

当结果为负时,表明2向量夹角为90-180度

当结果为0时,表明2微量夹角等于90度。此时垂直

 

向量外积、叉积的几何意义

A x B 结果为一向量

其模 |A x B| =  |x1y2 – y1x2|=|A||B|Sin(θ) 表示以A,B为邻边的平行四边形的面积。

当2向量平行时,Sin(θ) 为0,模为0.

  计算矢量叉积是与直线和线段相关算法的核心部分。

  1. 向量的叉积的模表示这两个向量围成的平行四边形的面积。
    设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,即:P×Q = x1*y2 - x2*y1,其结果是一个伪矢量。
    显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。
  2. 叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系
    若 P × Q > 0 , 则P在Q的顺时针方向。
    若 P × Q < 0 , 则P在Q的逆时针方向。
    若  P × Q = 0 , 则P与Q共线,但可能同向也可能反向。
  3. 叉积的方向与进行叉积的两个向量都垂直,所以叉积向量即为这两个向量构成平面的法向量。
  4. 如果向量叉积为零向量,那么这两个向量是平行关系。
    因为向量叉积是这两个向量平面的法向量,如果两个向量平行无法形成一个平面,其对应也没有平面法向量。所以,两个向量平行时,其向量叉积为零。

逆时针 

 

顺时针

 

 

//判断点point与线段(start,end)的关系

//返回值:>0 点在矢量start,end的逆时针方向

//       =0 点在线段(start,end)或其延长线上

//       <0 点在矢量start,end的顺时针方向

double PointOffLine( Point pt, Point start, Point end )

{

    return ((pt.x - end.x)*(start.y - end.y)-(start.x - end.x)*(pt.y - end.y))*1.;

}

  



 

posted @ 2012-06-06 09:57  phata  阅读(1929)  评论(0编辑  收藏  举报