几何问题 poj 1408
用向量积求线段焦点证明:
首先,我们设 (AD向量 × AC向量) 为 multi(ADC) ; 那么 S三角形ADC = multi(ADC)/2 。
由三角形DPD1 与 三角形CPC1 相似;可得 |DP| / |PC| = |DD1| / |CC1| = multi(ADB) × multi(ACB) 。
|DP| / |PC| = (xD - xP) / (xP - xC) = (yD - yP) / (yP - yC) 。
xP = ((multi(D,B,A) * xC - multi(C,B,A) * xD)) / (multi(D,B,A) - multi(C,B,A));
yP = ((multi(D,B,A) * yC - multi(C,B,A) * yD)) / (multi(D,B,A) - multi(C,B,A));
题目不难,大致题意为:
给定一个单位矩阵,并在每条边上面“嵌入”n个点,这样每条边共有n+2个点。将单位矩阵对面相应位置的点连接起来,构成n*n个不规则四边形。要求出这n*n个矩阵中面积的最大值。
简单的模拟+叉积求三角形面积+不规则四边形划分成三角形求面积。
枚举每个四边形,将每个四边形划分为2个三角形。利用三角形求面积公式计算面积。比较求出最大面积。
那么关键点在于如何求三角形面积。
下面提供2中方法:
1)解析几何:
海伦公式: S=p*(p-a)*(p-b)*(p-c)取根号,其中p=(a+b+c)/2;
2)计算几何方法
S=1/2*| ac向量 叉乘 ab向量|
显然,计算几何方法更快,且精度更高(没有根号),代码也少,而且在求线段交点的过程中也会用到叉乘。一举两得
另外在模拟的过程中,要格外小心,因为很多细节要注意。
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
using namespace std;
const int max_=;
typedef struct point{
double x;
double y;
}point;
point node[max_][max_];
double det(double x1,double y1,double x2,double y2)
{
return x1*y2-x2*y1;
}
double cross(point A,point B,point P)//AB,AP的叉乘
{
return det(B.x-A.x,B.y-A.y,P.x-A.x,P.y-A.y);
}
void intersection(point A,point B,point C,point D,int i,int j)//两线段的交点坐标
{
double nulti1=cross(A,B,C);
double nulti2=cross(A,B,D);
//printf("%lfok\n",nulti1);
node[i][j].x=(nulti2*C.x-nulti1*D.x)/(nulti2-nulti1);
node[i][j].y=(nulti2*C.y-nulti1*D.y)/(nulti2-nulti1);
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
node[][].x=0.0,node[][].y=1.0;
node[][n+].x=1.0,node[][n+].y=1.0;
node[n+][].x=0.0,node[n+][].y=0.0;
node[n+][n+].x=1.0,node[n+][n+].y=0.0;
for(int i=;i<=n+;i++)
{
scanf("%lf",&node[n+][i].x);
node[n+][i].y=0.0;
}
for(int i=;i<=n+;i++)
{
scanf("%lf",&node[][i].x);
node[][i].y=1.0;
}
for(int i=n+;i>=;i--)
{
scanf("%lf",&node[i][].y);
node[i][].x=0.0;
}
for(int i=n+;i>=;i--)
{
scanf("%lf",&node[i][n+].y);
node[i][n+].x=1.0;
}
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)
{
intersection(node[i][],node[i][n+],node[][j],node[n+][j],i,j);
}
double maxm=-1.0;
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)//两三角形面积和
{
double temp=fabs(cross(node[i][j],node[i+][j],node[i][j+]))*0.5+
fabs(cross(node[i+][j+],node[i+][j],node[i][j+]))*0.5;
if(maxm<temp)
maxm=temp;
// printf("ok\n");
}
printf("%.6lf\n",maxm);
/* for(int i=2;i<=n+1;i++){
for(int j=2;j<=n+1;j++)
printf("%lf ",node[i][j].x);
printf("\n");
}*/
}
}
几何问题 poj 1408的更多相关文章
- POJ 1408 Fishnet【枚举+线段相交+叉积求面积】
题目: http://poj.org/problem?id=1408 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- 简单几何(凸包) POJ 1696 Space Ant
题目传送门 题意:一个蚂蚁一直往左边走,问最多能走多少步,且输出路径 分析:就是凸包的变形题,凸包性质,所有点都能走.从左下角开始走,不停排序.有点纠结,自己的凸包不能AC.待理解透凸包再来写.. 好 ...
- 简单几何(凸包) POJ 1113 Wall
题目传送门 题意:求最短路线,使得线上任意一点离城堡至少L距离 分析:先求凸包,答案 = 凸包的长度 + 以L为半径的圆的周长 /*********************************** ...
- 简单几何(凸包) POJ 2187 Beauty Contest
题目传送门 题意:求两点的距离平方的最大值 分析:凸包模板题 /************************************************ * Author :Running_T ...
- Fishnet(暴力POJ 1408)
Fishnet Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1911 Accepted: 1227 Descripti ...
- 两条线段求交点+叉积求面积 poj 1408
题目链接:https://vjudge.net/problem/POJ-1408 题目是叫我们求出所有四边形里最大的那个的面积. 思路:因为这里只给了我们正方形四条边上的点,所以我们要先计算横竖线段两 ...
- POJ 1408:Fishnet
Fishnet Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1921 Accepted: 1234 Descripti ...
- poj很好很有层次感(转)
OJ上的一些水题(可用来练手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 30 ...
- POJ题目分类推荐 (很好很有层次感)
著名题单,最初来源不详.直接来源:http://blog.csdn.net/a1dark/article/details/11714009 OJ上的一些水题(可用来练手和增加自信) (POJ 3299 ...
随机推荐
- PAT甲级——A1144 TheMissingNumber【20】
Given N integers, you are supposed to find the smallest positive integer that is NOT in the given li ...
- PAT甲级——A1141 PATRankingofInstitution【25】
A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...
- shell /dev/null
/dev/null表示空设备,这里就是把日志记录到空设备里,就是不记录日志,Null 是一特殊指标值(或是一种物件参照 reference)表示这个指标并不指向任何的物件. 是一个特殊的文件,写入到它 ...
- zabbix主动模式设置
zabbix客户端发数据给服务端分为主被动两种模式,主动模式是zabbix客户端主动向服务端发送数据,被动模式是被动等待服务端来取数据. 主动模式: 客户端每隔一段时间主动向服务端发起连接请求--&g ...
- Darknet YOLOv3 on Jetson Nano
推荐比较好的博客:https://ai4sig.org/2019/06/jetson-nano-darknet-yolov3/ 用的AlexeyAB的版本,并且给出了yolov3和tiny的效果对比. ...
- 使用Nuget重新安装packages.config中的组件的方法
Update-Package -ProjectName 'Ko.app.web' -Reinstall 该语句作用:按照packages.config中给出的程序组件,重新下载安装一遍.
- Android编程之Listener侦听的N种写法及实现原理
写下这个题目时突然想起鲁迅笔下的孔乙已,茴香豆的几种写法,颇有些咬文嚼字的味道.虽然从事手机编程多年,但一直使用的是C和C++编程,由于安卓早期只支持JAVA开发,所以对于时下如火如荼的安卓系统,我一 ...
- KiCAD原理图导出PDF方法
KiCAD原理图导出为PDF 1.文件->绘制 2.按照下图选择保存目录和输出格式后,选择绘制当前页或者所有页
- 取消SVN感叹号即去除版本库
之前不小心直接将版本库 的内容检出 到桌面,后才发现桌面上的文件 都变成了问号,本来也以为没有多大问题,删除 .svn 即可,可是删除所有的.svn后,桌面上还是显示问号,刷新了很多次,还重启电脑 了 ...
- Tomcat 在IE中下载rar文件直接以乱码方式打开解决方案
这几天一直很纳闷,在Tomcat部署的网站中的下载文件中,如果文件是rar类型的,一点击下载rar文件就直接打开,并且出现乱码,右键另存为浏览器也是默认为html格式,一直以为是浏览器IE的问题,后来 ...