• poj 1408 Fishnet(计算几何)


    题目:http://poj.org/problem?id=1408

    题意:

    一个1X1的正方形,每条边上有n个不同的点(不包括顶点),并给出它们的坐标。现在把对边相对应的点相连,将正方形分割成(n+1)*(n+1)个小四边形。问最大的四边形的面积是多少。

    直接贴代码好了。。。

    View Code
      1 #include <iostream>
      2 #include<cstdio>
      3 #include<cmath>
      4 using namespace std;
      5 typedef struct node
      6 {
      7     double x,y;
      8 }point;
      9 point map[36][36];
     10 int n;
     11 double det(double x1,double y1,double x2,double y2)
     12 {
     13     return x1*y2-x2*y1;
     14 }
     15 double cross(point a,point b,point c,point d)
     16 {
     17     return det(b.x-a.x,b.y-a.y,d.x-c.x,d.y-c.y);
     18 }
     19 point jiaodian(point a,point b,point c,point d)
     20 {
     21     point h;
     22     double area1=cross(a,b,a,c);
     23     double area2=cross(a,b,a,d);
     24 
     25     h.x=(area2*c.x-area1*d.x)/(area2-area1);
     26     h.y=(area2*c.y-area1*d.y)/(area2-area1);
     27 
     28     return h;
     29 }
     30 double area(point a,point b,point c,point d)
     31 {
     32     double a2,a1;
     33     a1=fabs(0.5*cross(a,b,a,c));
     34     a2=fabs(0.5*cross(a,b,a,d));
     35     return a1+a2;
     36 }
     37 int main()
     38 {
     39     while(scanf("%d",&n)!=EOF)
     40     {
     41         if(n==0)
     42         break;
     43         int i,j;
     44         for(i=1;i<=n;i++)
     45         {
     46             scanf("%lf",&map[0][i].x);
     47             map[0][i].y=0;
     48         }//a
     49         for(i=1;i<=n;i++)
     50         {
     51             scanf("%lf",&map[n+1][i].x);
     52             map[n+1][i].y=1;
     53         }//b
     54         for(i=1;i<=n;i++)
     55         {
     56             scanf("%lf",&map[i][0].y);
     57             map[i][0].x=0;
     58         }//c
     59         for(i=1;i<=n;i++)
     60         {
     61             scanf("%lf",&map[i][n+1].y);
     62             map[i][n+1].x=1;
     63         }//d
     64         map[0][0].x=map[0][0].y=0;
     65         map[n+1][n+1].x=map[n+1][n+1].y=1;
     66         map[n+1][0].y=1;
     67         map[n+1][0].x=0;
     68         map[0][n+1].y=0;
     69         map[0][n+1].x=1;
     70         for(i=1;i<=n;i++)
     71         {
     72             point p;
     73             for(j=1;j<=n;j++)
     74             {
     75                 p=jiaodian(map[0][j],map[n+1][j],map[i][0],map[i][n+1]);
     76                 map[i][j]=p;
     77             }
     78 
     79         }
     80         /*for(i=0;i<=n+1;i++)
     81         {
     82             for(j=0;j<=n+1;j++)
     83             {
     84                 printf("(%f,%f) ",map[i][j].x,map[i][j].y);
     85             }
     86             printf("\n");
     87         }*/
     88         double res=0;
     89         for(i=0;i<=n;i++)
     90         {
     91             for(j=0;j<=n;j++)
     92             {
     93                 double uu;
     94                 uu=area(map[i][j],map[i+1][j+1],map[i+1][j],map[i][j+1]);
     95                 if(uu>res)
     96                 res=uu;
     97             }
     98         }
     99         printf("%.6f\n",res);
    100     }
    101     return 0;
    102 }
  • 相关阅读:
    EXTJS7 自定义日期时间选择输入框
    EXTJS7 store数据格式预处理
    EXTJS7 eventedConfig用法
    nginx 反向代理端口号丢失处理
    EXTJS7 引入treegrid包
    EXTJS7 自定义配置延迟初始化
    EXTJS7 解决无法绑定父组件ViewModel问题
    EXTJS7 combobox 下拉加载数据源码
    EXTJS7 可拖拉布局分割条
    EXTJS7 combobox本地模式 动态修改选项
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2939197.html
Copyright © 2020-2023  润新知