判断某一点在直线左右侧的方法

参考原文参考原文

注意向量是有方向的…判断 某一点在直线左右侧

左右方向是相对前进方向的,只要指定了前进方向就可以知道左右(比如指定前进方向是从直线的起点到终点).判断点在直线的左侧还是右侧是计算几何里面的一个最基本算法.使用矢量来判断.
定义:平面上的三点P1(x1,y1),P2(x2,y2),P3(x3,y3)组成三角形的面积是:

S(P1,P2,P3)=|y1 y2 y3|= [(x1-x3)*(y2-y3)-(y1-y3)*(x2-x3)]/2

当P1P2P3逆时针时S为正的,当P1P2P3顺时针时S为负的。

令矢量的起点为A,终点为B,判断的点为C,
如果S(A,B,C)为正数,则C在矢量AB的左侧;
如果S(A,B,C)为负数,则C在矢量AB的右侧;
如果S(A,B,C)为0,则C在直线AB上。

 

pInVectorLR.cpp

typedef struct {
  double x;
  double y;
} POINT;

double pInVectorLR(POINT begin,POINT end,POINT p){
    POINT p1 = begin,p2 = end,p3=p;
    //S(P1,P2,P3)=|y1 y2 y3|= (x1-x3)*(y2-y3)-(y1-y3)*(x2-x3) 
    /*
    令矢量的起点为A,终点为B,判断的点为C, 
    如果S(A,B,C)为正数,则C在矢量AB的左侧; 
    如果S(A,B,C)为负数,则C在矢量AB的右侧; 
    如果S(A,B,C)为0,则C在直线AB上。
     */
    double s = (begin.x-p3.x)*(p2.y-p3.y) - (p1.y-p3.y)*(p2.x-p3.x);
    return s;
}

 

发表评论

邮箱地址不会被公开。 必填项已用*标注