• HDU 2108 Shape of HDU


    题解:按照输入顺序依次将点连接起来,对于连续的三个点p0,p1,p2,令向量a=p1-p0,b=p2-p1

    若是凸多边形,那么b相对于a一定是向逆时针方向旋转的

    判断两向量的旋转方向,可以使用向量的叉积 a×bx1×y2-x2×y1

    a×b>0  b在a的逆时针方向
    a×b=0  b平行于a(共线)
    a×b<0  b在a的顺时针方向

    要注意的是,对于最后一个点pn,还要和起始的两个点p0,p1判断一次。

    #include <cstdio>
    struct node{int x,y;}pt[1010];
    int n,x1,x2,y1,y2;
    int direction(int x1,int y1,int x2,int y2){return x1*y2-x2*y1;}
    int test(){
        int i; pt[n]=pt[0], pt[n+1]=pt[1] ;
        for (i=2;i<=n+1;i++){
            x1=pt[i-1].x-pt[i-2].x,y1=pt[i-1].y-pt[i-2].y;
            x2=pt[i].x-pt[i-1].x,y2=pt[i].y-pt[i-1].y;
            if(direction(x1,y1,x2,y2)<0)return 0;
        }
        return 1;
    }
    int main (){
        int i;
        while (~scanf("%d",&n)&&n){
            for(i=0;i<n;i++)scanf("%d%d", &pt[i].x, &pt[i].y) ;
            puts(test()?"convex":"concave") ;
        }
        return 0 ;
    }
    
  • 相关阅读:
    MVC初体验-过滤器(10)
    MVC阶段复习(一)
    搭建自己的视频文件网站
    答辩系统bug修改记录
    linux的pvtrace环境配置
    Linux使用期间命令积累
    php项目第三季
    分布式作业
    php第二季
    php错误记录
  • 原文地址:https://www.cnblogs.com/forever97/p/3634212.html
Copyright © 2020-2023  润新知