Fishnet(几何)
http://poj.org/problem?id=1408
题意:给出 a1 a2 ... an
b1 b2 ... bn
c1 c2 ... cn
d1 d2 ... dn 这些点,求这些对应点连线形成的小四边形的最大面积。
思路:将所有的交点求出,同已知点一起存入二维矩阵中,枚举每个小四边形,求出其面积,找出最大的即可。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
const double eps=1e-;//设置精度
#define max1(a1,b1) (double)a1-(double)b1>eps?(double)a1:(double)b1
struct point//点
{
double x;
double y;
} map[][];//用二维数组的结构体存储所有的点
struct line//线
{
double a,b,c;
};
line getline(point p1,point p2)//由两点求直线ax+by+c=0
{
line tmp;
tmp.a = p1.y-p2.y;
tmp.b = p2.x-p1.x;
tmp.c = p1.x*p2.y-p2.x*p1.y;
return tmp;
}
point getIntersect(line L1,line L2)//求两直线交点
{
point tmp;
tmp.x = (L1.b*L2.c-L2.b*L1.c)/(L1.a*L2.b-L2.a*L1.b);
tmp.y = (L1.c*L2.a-L2.c*L1.a)/(L1.a*L2.b-L2.a*L1.b);
return tmp;
}
double area_polygon(int n,point* p)//求多边形面积
{
double s1=,s2=;
int i;
for (i=; i<n; i++)
{
s1+=p[(i+)%n].y*p[i].x;
s2+=p[(i+)%n].y*p[(i+)%n].x;
}
return fabs(s1-s2)/;
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
double Max = eps;
double a,b,c,d;
map[][].x = ;//初始化已知的四个顶点的坐标
map[][].y = ;
map[][n+].x = ;
map[][n+].y = ;
map[n+][].x = ;
map[n+][].y = ;
map[n+][n+].x = ;
map[n+][n+].y = ;
for (int j = ; j <= n; j++)//输入a1 a2 ... an,并存储其坐标
{
scanf("%lf",&a);
map[][j].x = a;
map[][j].y = ;
}
for (int j = ; j <= n; j++)//输入b1 b2 ... bn,并存储其坐标
{
scanf("%lf",&b);
map[n+][j].x = b;
map[n+][j].y = ;
}
for (int i = ; i <= n; i++)//输入c1 c2 ... cn,并存储其坐标
{
scanf("%lf",&c);
map[i][].x = ;
map[i][].y = c;
}
for (int i =; i <= n; i++)//输入d1 d2 ... dn,并存储其坐标
{
scanf("%lf",&d);
map[i][n+].x = ;
map[i][n+].y = d;
}
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
{
line L1 = getline(map[i][],map[i][n+]);//枚举所有可相交的直线
line L2 = getline(map[][j],map[n+][j]);
point tmp = getIntersect(L1,L2);//求这两条线的交点
map[i][j].x = tmp.x;//将求得的交点坐标存入相应的数组中
map[i][j].y = tmp.y; }
point p[];//存储四边形的顶点
for (int i = ; i <= n+; i++)
{ for (int j = ; j <= n+; j++)//枚举所有四边形右上角的顶点
{
p[] = map[i][j];//以map[i][j]为右上角的顶点组成的四边形的各点
p[] = map[i][j-];
p[] = map[i-][j-];
p[] = map[i-][j];
double s = area_polygon(,p);//求四边形的面积
Max = max1(s,Max);//求最大面积
} }
printf("%.6f\n",Max);
}
return ;
}
Fishnet(几何)的更多相关文章
- [ACM_几何] Fishnet
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28417#problem/C 本题大意:有一个1X1的矩形,每边按照从小到大的顺序给n ...
- 关于Three.js基本几何形状之SphereGeometry球体学习
一.有关球体SphereGeometry构造函数参数说明 <1>.SphereGeometry(radius, widthSegments, heightSegments, phiStar ...
- 几何服务,cut功能测试
关于几何服务 几何服务用于辅助应用程序执行各种几何计算,如缓冲区.简化.面积和长度计算以及投影.在 ArcGIS Server 管理器中启动几何服务之后,您才能够在应用程序开发过程中使用该服务. 问题 ...
- 几何服务,cut功能,输入要素target(修改后)内容。
几何服务,cut功能测试,输入要素target(修改后)内容. {"displayFieldName":"","fieldAliases": ...
- 几何服务,cut功能,输入要素target(修改前)内容。
几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...
- 如何让你的UWP应用程序无缝调用几何作图
有时候需要编辑一些几何图形,如三角形,圆锥曲线等,在UWP应用中加入这些几何作图功能是件费时间又很难做好的事.其实Windows 10 应用商店中已有一些专业的几何作图工具了,那么能借来一用吗?答案是 ...
- poj 2031Building a Space Station(几何判断+Kruskal最小生成树)
/* 最小生成树 + 几何判断 Kruskal 球心之间的距离 - 两个球的半径 < 0 则说明是覆盖的!此时的距离按照0计算 */ #include<iostream> #incl ...
- NOIP2002矩形覆盖[几何DFS]
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- DOM 元素节点几何量与滚动几何量
当在 Web 浏览器中查看 HTML 文档时,DOM 节点被解析,并被渲染成盒模型(如下图),有时我们需要知道一些信息,比如盒模型的大小,盒模型在浏览器中的位置等等,本文我们就来详细了解下元素节点的几 ...
随机推荐
- SpringMVC与MyBatis整合方法
一.springmvc+mybaits的系统架构: 第一步:整合dao层 mybatis和spring整合,通过spring管理mapper接口. 使用mapper的扫描器自动扫描mapper接口在s ...
- webAPP 原生APP 对比
Web App即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发具有跨平台的优势,该模式通常由“HTML5云网站+APP应用客户端”两部份构成,APP应用客户端只需安装应用的框架 ...
- BZOJ 4285 使者 (CDQ分治+dfs序)
题目传送门 题目大意:给你一棵树,有三种操作,在两个点之间连一个传送门,拆毁一个已有的传送门,询问两个点之间的合法路径数量.一条合法路径满足 1.经过且仅经过一个传送门 2.不经过起点终点简单路径上的 ...
- 13.multi_match实现dis_max+tie_breaker
主要知识点: 基于multi_match语法实现dis_max+tie_breaker 1.best_fields+tie_breaker GET /forum/article/_search ...
- mysql登录出现1045错误
这个问题是在window server 2012上安装mysql之后, 远程访问时出现的1045错误 我新建了一个相同的用户用于远程访问, 密码也相同, 但是还是访问不了 参照链接:https://b ...
- 303. Range Sum Query - Immutable(动态规划)
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...
- Codeforces Round #413(Div. 1 + Div. 2, combined)——ABCD
题目在这里 A.Carrot Cakes 乱七八糟算出两个时间比较一下就行了 又臭又长仅供参考 #include <bits/stdc++.h> #define rep(i, j, k) ...
- linux的ulimit各种限制之深入分析
一般可以通过ulimit命令或编辑/etc/security/limits.conf重新加载的方式使之生效 通过ulimit比较直接,但只在当前的session有效,limits.conf中可以根据用 ...
- 如何修改cnblogs的文本编辑器
我发现从别处复制过来的文本,文字上下间隔太大,所以我点击“html”标签,然后,把html内容复杂到记事本里,用记事本替换的功能,把“<p>”替换为“<p style="p ...
- 20180530利用Maxwell组件实时监听Mysql的binlog日志
转自:https://blog.csdn.net/qq_30921461/article/details/78320750 http://kafka.apache.org/quickstart htt ...