两条线段求交点+叉积求面积 poj 1408
题目链接:https://vjudge.net/problem/POJ-1408
题目是叫我们求出所有四边形里最大的那个的面积。
思路:因为这里只给了我们正方形四条边上的点,所以我们要先计算横竖线段两两相交的所有交点,如果不会求两条线段之间的交点的话可以看一下这个博客:https://www.cnblogs.com/elpsycongroo/p/8726513.html
然后再求每一个四边形的面积,要求某个四边形的面积的话,可以先确定四个点中的一个点,这样其他三个点就随之确定了,在这里应该是先确定左下角的点比较方便,得到四个点坐标之后就可以把一个四边形切割成两个三角形,用叉积求三角形面积,然后两个三角形面积相加就是四边形面积了。
我的代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<set>
#include<cstdio>
using namespace std;
#define eps 1e-8
#define ll long long
#define INF 0x3f3f3f3f
double a[],b[],c[],d[];
int n,m,cnt;
struct point{
double x,y;
}p[][];
double ans;
void read()
{
for(int i=;i<=n;i++)
scanf("%lf",&a[i]);
for(int i=;i<=n;i++)
scanf("%lf",&b[i]);
for(int i=;i<=n;i++)
scanf("%lf",&c[i]);
for(int i=;i<=n;i++)
scanf("%lf",&d[i]);
a[]=b[]=; //四个角上的点的横纵坐标
a[n+]=b[n+]=;
c[]=d[]=;
c[n+]=d[n+]=;
}
point cal(double x1,double x2,double y1,double y2)//求交点的函数
{
double a1=,b1=x1-x2,c1=-x1;
double a2=y2-y1,b2=-,c2=y1;
double D=a1*b2-a2*b1;
point ans;
ans.x=(b1*c2-b2*c1)/D;
ans.y=(a2*c1-a1*c2)/D;
return ans;
}
void get_point()
{
for(int i=;i<=n+;i++)
{
for(int j=;j<=n+;j++)
{
p[i][j]=cal(a[i],b[i],c[j],d[j]);
}
}
}
double cross(point a,point b,point c)//叉积
{
return fabs((b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x));
}
void get_area()
{
for(int i=;i<n+;i++)
{
for(int j=;j<n+;j++)
{
double area=;
area+=cross(p[i][j],p[i][j+],p[i+][j])/2.0;
area+=cross(p[i+][j+],p[i][j+],p[i+][j])/2.0;
ans=max(area,ans);
}
}
}
int main()
{
while(scanf("%d",&n)&&n)
{
read(); //输入
cnt=;
get_point();//求交点
ans=;
get_area();//求面积
printf("%.6f\n",ans);
}
return ;
}
两条线段求交点+叉积求面积 poj 1408的更多相关文章
- POJ 1408 Fishnet【枚举+线段相交+叉积求面积】
题目: http://poj.org/problem?id=1408 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- poj 1269 Intersecting Lines——叉积求直线交点坐标
题目:http://poj.org/problem?id=1269 相关知识: 叉积求面积:https://www.cnblogs.com/xiexinxinlove/p/3708147.html什么 ...
- 求两条线段交点zz
"求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说, 希望对大家有所帮助. 本 ...
- poj 1654 Area(计算几何--叉积求多边形面积)
一个简单的用叉积求任意多边形面积的题,并不难,但我却错了很多次,double的数据应该是要转化为long long,我转成了int...这里为了节省内存尽量不开数组,直接计算,我MLE了一发...,最 ...
- POJ 1039 Pipe(直线和线段相交判断,求交点)
Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8280 Accepted: 2483 Description ...
- POJ 1279 Art Gallery(半平面交求多边形核的面积)
题目链接 题意 : 求一个多边形的核的面积. 思路 : 半平面交求多边形的核,然后在求面积即可. #include <stdio.h> #include <string.h> ...
- 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- hdu 2036:改革春风吹满地(叉积求凸多边形面积)
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- poj 1279 Art Gallery - 求多边形核的面积
/* poj 1279 Art Gallery - 求多边形核的面积 */ #include<stdio.h> #include<math.h> #include <al ...
随机推荐
- 类方法@classmethod
通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法. 式例 1 比如: class Hello(object): def __init__: ...
- PHP5 的五种常用模式
PHP5 的五种常用模式. 工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系 ...
- GitHub创建个人主页
在GitHub,一个项目对应唯一的Git版本库,创建一个新的版本库就是创建一个新的项目.访问仪表板(Dashboard)页面,如图3-1,可以看 到关注的版本库中已经有一个,但自己的版本库为零.在显示 ...
- sqlserver中 事物 索引及视图
事务 1.什么是事务 事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行 2.事务的4个属性 (1). ...
- confusing c++ 重写 与 重定义 记录1
class parent { public: void f() { cout << "parent f()" << endl; } void f(int i ...
- js 选项卡制作
知识回顾,制作JS选项卡,仅供参考 html代码: <!DOCTYPE html> <html lang="en"> <head> <me ...
- vue:页面跳转和传参(页面之间,父传子,子传父)
1.返回上一个页面: A.<a @click="$router.back(-1)" class="btn">重新加载</a> B.thi ...
- Spring事务异常rollback-only
转自:https://blog.csdn.net/sgls652709/article/details/49472719 前言 在利用单元测试验证spring事务传播机制的时候出现了下面的异常: Tr ...
- [Shell]Bash基本功能:输入输出重定向
/*----------------------------------------------------------------------------------------------- @黑 ...
- gitbash上使用tree
gitbash上使用tree vscode从cmd设置gitbash之后,想在使用windows下的tree命令发现运行不了,有两种解决方案. 1,在gitbash上cmd //c tree,就等同c ...