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 节点被解析,并被渲染成盒模型(如下图),有时我们需要知道一些信息,比如盒模型的大小,盒模型在浏览器中的位置等等,本文我们就来详细了解下元素节点的几 ...
随机推荐
- 更改计算机名后DB2不能启动的解决方法
1.找到以下位置目录下相应的文件db2nodes.cfg C:\Documents and Settings\All Users\Application Data\IBM\DB2\DB2COPY1\D ...
- (转)分布式文件存储FastDFS(六)FastDFS多节点配置
http://blog.csdn.net/xingjiarong/article/details/50759918 前面几篇关于FastDFS的博客中介绍了如何在一台机器上搭建一个简易的FastDFS ...
- C# 调用指定打印机 (并不是默认)
this.printDocument1.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"; this.pr ...
- jenkins执行python脚本
参考: https://blog.csdn.net/qq_39247153/article/details/81003244 https://blog.csdn.net/huashao0602/art ...
- 学不好Python?我们分析看看正确的学习方法是什么-马哥教育
提起对Python的印象,除了全能之外恐怕就是简单易学了.很多人都在推荐新手学Python入门,毕竟语法简单.语句简洁,所谓“人生苦短我用Python”绝不是一句空话.不过也不能忽视一点:Python ...
- js 简单小知识
1. javascript的typeof返回哪些数据类型: string, boolean, number, undefined, function, object 2. split() join() ...
- 16.1 foreach 循环中捕获变量的变化
在 foreach 循环内的匿名函数(通常为Lambda表达式)中捕获循环 变量时要格外小心.代码清单16-1就展示了这样一个简单的示例,它看上去似乎会输出 x . y . z . string[] ...
- BOM对象和DOM对象
一.BOM对象 BOM(Browser Object Model)是指浏览器对象模型,可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执行其他与页面内容不直接相 ...
- JavaScript进阶----关于数字的方法,Math对象,日期对象,定时器,函数,for in
关于数字的方法: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Beetl学习总结(1)——新一代java模板引擎典范 Beetl入门
1. 什么是Beetl Beetl目前版本是2.7.0,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使得开发和维护模板有很好的体验.是新一代的模板引擎. ...