zoukankan      html  css  js  c++  java
  • POJ 3335 Rotating Scoreboard(多边形的核)

    题目链接

    我看的这里:http://www.cnblogs.com/ka200812/archive/2012/01/20/2328316.html

    然后整理一下当做模版。0换成eps,会wa,应该要写成精度特判把。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <string>
     4 #include <cmath>
     5 #include <algorithm>
     6 using namespace std;
     7 #define eps 1e-8
     8 #define N 110
     9 struct point
    10 {
    11     double x,y;
    12 }p[N],temp[N],pre[N];
    13 int n,m;
    14 double a,b,c;
    15 void getline(point x,point y)
    16 {
    17     a = y.y - x.y;
    18     b = x.x - y.x;
    19     c = y.x * x.y - x.x * y.y;
    20 }
    21 point intersect(point x,point y) //获取直线ax+by+c==0  和点x和y所连直线的交点
    22 {
    23     double u = fabs(a*x.x+b*x.y+c);
    24     double v = fabs(a*y.x+b*y.y+c);
    25     point ans;
    26     ans.x = (x.x*v+y.x*u)/(u+v);
    27     ans.y = (x.y*v+y.y*u)/(u+v);
    28     return ans;
    29 }
    30 void cut()
    31 {
    32     int num = 0,i;
    33     for(i = 1;i <= m;i ++)
    34     {
    35         if(a*p[i].x + b*p[i].y + c >= 0)
    36         {
    37             temp[++num] = p[i];
    38         }
    39         else
    40         {
    41             if(a*p[i-1].x + b*p[i-1].y + c > 0)
    42             temp[++num] = intersect(p[i],p[i-1]);
    43             if(a*p[i+1].x + b*p[i+1].y + c > 0)
    44             temp[++num] = intersect(p[i],p[i+1]);
    45         }
    46     }
    47     for(i = 1;i <= num;i ++)
    48     p[i] = temp[i];
    49     p[0] = p[num];
    50     p[num+1] = p[1];
    51     m = num;
    52 }
    53 void fun()
    54 {
    55     int i;
    56     m = n;
    57     for(i = 1;i <= n;i ++)
    58     {
    59         getline(pre[i],pre[i+1]);
    60         cut();
    61     }
    62 }
    63 int main()
    64 {
    65     int i,t;
    66     scanf("%d",&t);
    67     while(t--)
    68     {
    69         scanf("%d",&n);
    70         for(i = 1;i <= n;i ++)
    71         {
    72             scanf("%lf%lf",&pre[i].x,&pre[i].y);
    73             p[i] = pre[i];
    74         }
    75         pre[n+1] = pre[1];
    76         p[n+1] = p[1];
    77         p[0] = p[n];
    78         fun();
    79         if(m)
    80         printf("YES
    ");
    81         else
    82         printf("NO
    ");
    83     }
    84     return 0;
    85 }
  • 相关阅读:
    斐波拉契数列
    判断润年
    欧拉回路
    走迷宫
    八连块问题
    知道一棵二叉树的前序和中序序列求二叉树的后续序列
    判断一个顺序排列的栈的输出序列
    Number Sequence
    如何去设计一个自适应的网页设计或HTMl5
    position
  • 原文地址:https://www.cnblogs.com/naix-x/p/3251527.html
Copyright © 2011-2022 走看看