凸多边形的判断(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;                
  }

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值