zoukankan      html  css  js  c++  java
  • POJ 2318 TOYS

    简单计算几何,用叉积判断点是否在四边形内部。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int maxn=5000+10;
    int n,m,X1,Y1,X2,Y2;
    int U[maxn],L[maxn];
    int ans[maxn];
    bool flag[maxn];
    struct Point
    {
        int x,y;
    } p[maxn];
    
    char s[10000];
    
    void init()
    {
        memset(flag,0,sizeof flag);
        memset(ans,0,sizeof ans);
    }
    
    int F(int a1,int b1,int a2,int b2)
    {
        //返回向量(a1,b1)与向量(a2,b2)的叉积
        return a1*b2 - a2*b1;
    }
    
    bool judge(int a1,int b1,int a2,int b2,int a3,int b3,int a4,int b4,int A,int B)
    {
        if(F(a2-a1,b2-b1,A-a1,B-b1)>0) return 0;
        if(F(a3-a2,b3-b2,A-a2,B-b2)>0) return 0;
        if(F(a4-a3,b4-b3,A-a3,B-b3)>0) return 0;
        if(F(a1-a4,b1-b4,A-a4,B-b4)>0) return 0;
        return 1;
    }
    
    int main()
    {
        while(~scanf("%d",&n))
        {
            if(!n) break;
            scanf("%d%d%d%d%d",&m,&X1,&Y1,&X2,&Y2);
            init();
            for(int i=1; i<=n; i++) scanf("%d%d",&U[i],&L[i]);
            U[0]=X1;
            L[0]=X1;
            U[n+1]=X2;
            L[n+1]=X2;
            for(int i=1; i<=m; i++) scanf("%d%d",&p[i].x,&p[i].y);
            for(int i=0; i<=n; i++)
            {
                for(int j=1; j<=m; j++)
                {
                    if(flag[j]!=0) continue;
                    if(judge(U[i],Y1,U[i+1],Y1,L[i+1],Y2,L[i],Y2,p[j].x,p[j].y))
                        flag[j]=1,ans[i]++;
                }
            }
            for(int i=0; i<=n; i++) printf("%d: %d
    ",i,ans[i]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    VUE DEVTOOLS 安装方法(npm cnpm 安装失败找不到安装工具问题解决方法)
    idea 注释模版
    阿里巴巴编码规范
    JRebel 实现热部署
    SPRING 扩展组件
    oracle 闪回
    ORACLE 日常
    springboot log4j
    支付宝异步回调验证签名的那些走过的坑
    ASP.NET MVC5(一)—— URL路由
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4925670.html
Copyright © 2011-2022 走看看