poj 1408(计算几何)
2012-12-03 17:39
417 查看
1,求线段交点。
2,枚举各个面积
2,枚举各个面积
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; struct point { double x,y; }; struct line { point a,b; line(){} line(point aa,point bb) { a=aa; b=bb; } }; point intersection(line u,line v) { point ret=u.a; 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)); ret.x+=(u.b.x-u.a.x)*t; ret.y+=(u.b.y-u.a.y)*t; return ret; } double area_of_polygon(int n,point * p) { double s; if(n<3) return 0; s=p[0].y*(p[n-1].x-p[1].x); for(int i=1;i<n;i++) s+=p[i].y*(p[i-1].x-p[(i+1)%n].x); return fabs(s/2); } double a[35],b[35],c[35],d[35]; int n; int main() { while(scanf("%d",&n)) { if(n==0) break; a[0]=b[0]=c[0]=d[0]=0.0; a[n+1]=b[n+1]=c[n+1]=d[n+1]=1.0; for(int i=1;i<=n;i++) scanf("%lf",&a[i]); for(int i=1;i<=n;i++) scanf("%lf",&b[i]); for(int i=1;i<=n;i++) scanf("%lf",&c[i]); for(int i=1;i<=n;i++) scanf("%lf",&d[i]); sort(a,a+n+1); sort(b,b+n+1); sort(c,c+n+1); sort(d,d+n+1); double ans=0; point tmp[4]; point intsec[35][35]; for(int i=0;i<=n+1;i++) { point aa,bb; aa.x=a[i]; aa.y=0; bb.x=b[i]; bb.y=1; line u=line(aa,bb); //cout<<u.a.x<<" "<<u.a.y<<" "<<u.b.x<<" "<<u.b.y<<endl; for(int j=0;j<=n+1;j++) { point cc,dd; cc.x=0; cc.y=c[j]; dd.x=1; dd.y=d[j]; line v=line(cc,dd); intsec[i][j]=intersection(u,v); //cout<<intsec[i][j].x<<" "<<intsec[i][j].y<<endl; } } for(int i=1;i<=n+1;i++) { for(int j=1;j<=n+1;j++) { tmp[0]=intsec[i-1][j]; tmp[1]=intsec[i-1][j-1]; tmp[2]=intsec[i][j-1]; tmp[3]=intsec[i][j]; double t=area_of_polygon(4,tmp); if(t>ans) ans=t; } } printf("%.6f\n",ans); } return 0; }
相关文章推荐
- poj 1408 Fishnet(计算几何)
- poj 1408 Fishnet(计算几何 叉积求面积 求两直线交点 暴力)
- POJ 1408-Fishnet(计算几何-根据交点求多边形面积)
- POJ 1408 渣渣计算几何
- poj 1408(计算几何)
- POJ Fishnet 1408(计算几何)
- poj 1408 Fishnet(计算几何)
- POJ 1269 Intersecing Lines <计算几何>
- POJ 1269 Intersecting Lines --计算几何
- poj 3512 Incidental Points(计算几何)
- poj 1556(迪杰斯特拉+计算几何)
- poj初期 计算几何
- TOYS - POJ 2318(计算几何,叉积判断)
- POJ1118 Lining Up 计算几何
- POJ 1066 计算几何 线段相交
- POJ - 2398 Toy Storage(计算几何)
- POJ 3304(计算几何初步——判断线段和直线相交,加上枚举)
- POJ 1556 The Doors 计算几何+MST
- poj-2318-TOYS-计算几何
- POJ 2318 TOYS(计算几何)