hdu2108判断多边形是否为凸多边形

矢量的叉积,来判断拐向。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct coordinate
{
    double x;
    double y;
};
int cross(coordinate p1,coordinate p2,coordinate p3)
{
    if((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y)>0)
    return 1;
    else
    return 0;
}
int main()
{
   //freopen("Input.txt","r",stdin);
   int n;
   while(cin>>n,n)
   {
       coordinate *point=new coordinate[n];
       for(int i=0;i<n;i++)
       cin>>point[i].x>>point[i].y;
       int flag=1;
       for(int i=0;i<n;i++)
       {
           for(int j=0;j<n;j++)
           if(j!=i&&j!=(i+1)%n)
           {
               int mark=cross(point[i],point[(i+1)%n],point[(i+2)%n]);
               if(cross(point[i],point[(i+1)%n],point[j])!=mark)
               {
                  flag=0;
                  break;
               }
           }
           if(!flag) break;
       }
        if(flag) cout<<"convex"<<endl;
        else cout<<"concave"<<endl;
   }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值