两条线段求交点+叉积求面积 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 ...
随机推荐
- TabNavigator Container Example
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- QT中控制台程序运行问题
环境: ubuntu14.04 问题与解决方法: QT中的控制他程序,默认运行方式是直接输出到Output窗口中来.我的程序需要从控制台输入,这时候默认的运行方式就不行了.通过设置工程全选项让它在终端 ...
- 抛出异常 exception
throw raise raise Exception.CreateFmt(sFileWithNoExt, [FileName]);
- js页面百分比缩放
<script> var docEl = document.documentElement, resizeEvt = 'orientationchange' in window ? 'or ...
- php中显示数组与对象的实现代码
1. 使用 print_r ( $array/$var ) print 是打印的意思,而r则取自Array的单词,那么该函数的功能就是打印数组内容,它既可以打印数组内容,也可以打印普通的变量. pri ...
- java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
Hibernate4.x与spring3.x整合,有关事务的处理,用Junit4测试,出现org.springframework.beans.factory.BeanCreationException ...
- 删除oracle数据库用户
手工删除ORACLE数据库用户时常会出现会话进程仍在使用导致删除失败的情况.需要查询会话并将会话删除才能成功将数据库用户删除,比较不方便. 适用场景 自动删除oracle数据库用户 基本知识 orac ...
- C++随记
1.const限定符 const限定变量的值不可变,并且const对象必须要初始化 const int buf = 512; //正确,表明buf的值为512 buf = 400; //错误,buf ...
- [福大2018高级软工教学]团队Beta阶段成绩汇总
一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineerning2018/homework/2465 二.Beta阶段作业 ...
- Glide4 高效加载图片的配置【转】
原文: Glide4 高效加载图片的配置 https://www.jianshu.com/p/a079713f280f