hdu 2108 Shape of HDU 计算几何(向量的叉积)

来源:互联网 发布:矩阵 特征值 特征向量 编辑:程序博客网 时间:2024/05/17 09:37
#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <string>#include <algorithm>#include <iostream>using namespace std;const int maxn=1010;struct node{    int a,b;}e[maxn];bool find(int x1,int y1,int x2,int y2,int x3,int y3){    //cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<" "<<x3<<" "<<y3<<endl;    return (x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)>=0;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        if(n==0)break;        int i,j,k,flag=0;        for(i=0;i<n;i++)            scanf("%d%d",&e[i].a,&e[i].b);        if(!find(e[n-1].a,e[n-1].b,e[0].a,e[0].b,e[1].a,e[1].b))flag=1;        if(!find(e[n-2].a,e[n-2].b,e[n-1].a,e[n-1].b,e[0].a,e[0].b))flag=1;        for(i=0;i<n-2;i++)        {            if(flag==1)break;            if(!find(e[i].a,e[i].b,e[i+1].a,e[i+1].b,e[i+2].a,e[i+2].b))flag=1;        }        if(flag)printf("concave\n");        else printf("convex\n");    }    return 0;}/*    向量a=(x1,y1),b=(x2,y2);    向量的叉积a×b=x1*y2-x2*y1;    当a×b>0时,b在a的逆时针方向,当a×b=0时,b与a共线,当a×b<0时,b在a的顺时针方向。    对于连续输入的三点A(x1,y1),B(x2,y2),C(x3,y3);    根据凸多边形的性质:向量AC(x3-x1,y3-y1)必定在向量AB(x2-x1,y2-y1)的逆时针方向,或者共线。    所以AB×AC>=0,即ans=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)>=0    当出现ans<0时,即为凹多边形。*/

原创粉丝点击