天天看点

凸多边形的判断(c++)

//这个函数判断点c在线段ab的左边还是右边,

//如果返回值大于0在左边,如果小于0在右边,否则共线  

  double   left_right(point   a,point   b,point   c)  

  {  

        a.x-=c.x;   a.y-=c.y;  

        b.x-=c.x;   b.y-=c.y;  

        return   a.x*b.y-a.y*b.x;  

  }  

  bool   is_tu(point   *p,int   n)  

  {  

          if(n<4)   return   false;  

          double   a,b;  

          a   =   left_right(p[0],p[1],p[2]);  

          for(;   ++p,--n>2;   a=b){  

              b   =   left_right(p[0],p[1],p[2]);  

              if(a*b<0)  

                  return   false;  

          }  

          return   true;                

  }

继续阅读