zoukankan      html  css  js  c++  java
  • hdu 1756 Cupid's Arrow(计算几何)

    题目链接:hdu 1756 Cupid's Arrow

    题意:

    顺时针给你n个点,然后m个询问,问你给出的点是否在n个点构成的多边形的内部。

    题解:

    直接上模板。

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 #define MAXN 1007
     4 #define offset 10000
     5 #define eps 1e-10
     6 //浮点数判 0
     7 #define zero(x) (((x)>0?(x):-(x))<eps)
     8 //浮点数判断符
     9 #define _sign(x) ((x)>eps?1:((x)<-eps?2:0))
    10 //定义点
    11 struct point
    12 {
    13     double x,y;
    14 }pt[MAXN],tmp;
    15 double xmult(point p1,point p2,point p0)
    16 {
    17     return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    18 }
    19 int inside_polygon(point q,int n,point* p,int on_edge=2)
    20 {
    21     point q2;
    22     int i=0,count;
    23     while (i<n)
    24     for (count=i=0,q2.x=rand()+offset,q2.y=rand()+offset;i<n;i++)
    25     {
    26         if (zero(xmult(q,p[i],p[(i+1)%n]))&&(p[i].x-q.x)*(p[(i+1)%n].x-q.x)<eps&&(p[i].y-q.y)*(p[(i+1)%n].y-q.y)<eps)
    27             return on_edge;
    28         else if (zero(xmult(q,q2,p[i])))break;
    29         else if (xmult(q,p[i],q2)*xmult(q,p[(i+1)%n],q2)<-eps&&
    30         xmult(p[i],q,p[(i+1)%n])*xmult(p[i],q2,p[(i+1)%n])<-eps)
    31         count++;
    32     }
    33     return count&1;
    34 }
    35 int n,m;
    36 int main()
    37 {
    38     while(~scanf("%d",&n))
    39     {
    40         F(i,0,n-1)scanf("%lf%lf",&pt[i].x,&pt[i].y);
    41         scanf("%d",&m);
    42         F(i,1,m)
    43         {
    44             scanf("%lf%lf",&tmp.x,&tmp.y);
    45             puts(inside_polygon(tmp,n,pt)?"Yes":"No");
    46         }
    47     }
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    MySQL调优篇 | 逻辑架构解读(1)
    SQLPlus 在连接时通常有四种方式
    Oracle解决索引碎片功能
    windows2003 ftp 无法下载 解决
    bat记录
    ACCESS字符串操作函数
    缓存和RAID如何提高磁盘IO性能
    TortoiseSVN 命令 (命令行执行工具)
    在RHEL5下实现磁盘分区和磁盘配额
    PS 命令详解
  • 原文地址:https://www.cnblogs.com/bin-gege/p/6514385.html
Copyright © 2011-2022 走看看