zoukankan      html  css  js  c++  java
  • poj 1408(计算几何)

    1,求线段交点。

    2,枚举各个面积

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <cmath>
      6 
      7 using namespace std;
      8 
      9 struct point
     10 {
     11     double x,y;
     12 };
     13 struct line
     14 {
     15     point a,b;
     16     line(){}
     17     line(point aa,point bb)
     18     {
     19         a=aa;
     20         b=bb;
     21     }
     22 };
     23 
     24 point intersection(line u,line v)
     25 {
     26     point ret=u.a;
     27     double t=((u.a.x-v.a.x) * (v.a.y-v.b.y) -(u.a.y-v.a.y)*(v.a.x-v.b.x))/((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
     28     ret.x+=(u.b.x-u.a.x)*t;
     29     ret.y+=(u.b.y-u.a.y)*t;
     30     return ret;
     31 }
     32 
     33 double area_of_polygon(int n,point * p)
     34 {
     35     double s;
     36     if(n<3) return 0;
     37     s=p[0].y*(p[n-1].x-p[1].x);
     38     for(int i=1;i<n;i++)
     39         s+=p[i].y*(p[i-1].x-p[(i+1)%n].x);
     40     return fabs(s/2);
     41 }
     42 
     43 double a[35],b[35],c[35],d[35];
     44 int n;
     45 
     46 int main()
     47 {
     48     while(scanf("%d",&n))
     49     {
     50         if(n==0) break;
     51         a[0]=b[0]=c[0]=d[0]=0.0;
     52         a[n+1]=b[n+1]=c[n+1]=d[n+1]=1.0;
     53         for(int i=1;i<=n;i++)
     54             scanf("%lf",&a[i]);
     55         for(int i=1;i<=n;i++)
     56             scanf("%lf",&b[i]);
     57         for(int i=1;i<=n;i++)
     58             scanf("%lf",&c[i]);
     59         for(int i=1;i<=n;i++)
     60             scanf("%lf",&d[i]);
     61         sort(a,a+n+1);
     62         sort(b,b+n+1);
     63         sort(c,c+n+1);
     64         sort(d,d+n+1);
     65         double ans=0;
     66         point tmp[4];
     67         point intsec[35][35];
     68         for(int i=0;i<=n+1;i++)
     69         {
     70             point aa,bb;
     71             aa.x=a[i];
     72             aa.y=0;
     73             bb.x=b[i];
     74             bb.y=1;
     75             line u=line(aa,bb);
     76             //cout<<u.a.x<<" "<<u.a.y<<" "<<u.b.x<<" "<<u.b.y<<endl;
     77             for(int j=0;j<=n+1;j++)
     78             {
     79                 point cc,dd;
     80                 cc.x=0;
     81                 cc.y=c[j];
     82                 dd.x=1;
     83                 dd.y=d[j];
     84                 line v=line(cc,dd);
     85                 intsec[i][j]=intersection(u,v);
     86                 //cout<<intsec[i][j].x<<" "<<intsec[i][j].y<<endl;
     87             }
     88         }
     89         for(int i=1;i<=n+1;i++)
     90         {
     91             for(int j=1;j<=n+1;j++)
     92             {
     93                 tmp[0]=intsec[i-1][j];
     94                 tmp[1]=intsec[i-1][j-1];
     95                 tmp[2]=intsec[i][j-1];
     96                 tmp[3]=intsec[i][j];
     97                 double t=area_of_polygon(4,tmp);
     98                 if(t>ans)
     99                     ans=t;
    100             }
    101         }
    102         printf("%.6f\n",ans);
    103     }
    104     return 0;
    105 }
  • 相关阅读:
    1025WHERE执行顺序以及MySQL查询优化器
    1025基础REDIS
    1025关于explain的补充1
    1021mysql 全外连接
    python开发进程:进程开启方式&多进程
    python开发面向对象进阶:反射&内置函数
    python开发socket套接字:粘包问题&udp套接字&socketserver
    python开发面向对象基础:封装
    python开发模块基础:异常处理&hashlib&logging&configparser
    python开发面向对象基础:接口类&抽象类&多态&钻石继承
  • 原文地址:https://www.cnblogs.com/Missa/p/2800047.html
Copyright © 2011-2022 走看看