博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法复习——半平面交(bzoj2618凸多边形)
阅读量:5022 次
发布时间:2019-06-12

本文共 1401 字,大约阅读时间需要 4 分钟。

讲解:

这里套用wuvin神犇的ppt,附上友情链接:http://blog.leanote.com/wuvin

半平面交:

算法流程:

注意事项:

例题:

Description

逆时针给出
n个凸多边形的顶点坐标,求它们交的面积。例如n=2时,两个凸多边形如下图:
 

 

 

则相交部分的面积为5.233。

Input

第一行有一个整数n,表示凸多边形的个数,以下依次描述各个多边形。第i个多边形的第一行包含一个整数mi,表示多边形的边数,以下mi行每行两个整数,逆时针给出各个顶点的坐标。

 

Output

    输出文件仅包含一个实数,表示相交部分的面积,保留三位小数。

 

Sample Input

2
6
-2 0
-1 -2
1 -2
2 0
1 2
-1 2
4
0 -3
1 -1
2 2
-1 0

Sample Output

5.233

HINT

 

100%的数据满足:2<=n<=10,3<=mi<=50,每维坐标为[-1000,1000]内的整数

题解:

  半平面交裸题

心得:

  主要是代码很烦吧···一定要理清点与点之间的关系,多画图帮助理解;

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int N=250005;struct point { double x; double y;}p[N],a[N];struct line{ point a; point b; double slope;}l[N],q[N];inline double operator * (point a,point b){ return a.x*b.y-a.y*b.x;}inline point operator - (point a,point b){ point t; t.x=a.x-b.x; t.y=a.y-b.y; return t;}inline point inter(line a,line b){ double k1=(b.b-a.a)*(a.b-a.a); double k2=(a.b-a.a)*(b.a-a.a); double t=k1/(k1+k2); point k; k.x=b.b.x+(b.a.x-b.b.x)*t; k.y=b.b.y+(b.a.y-b.b.y)*t; return k;}bool jud(line a,line b,line c){ point t=inter(a,b); return (t-c.a)*(c.b-c.a)>0;}int n,k,cnt,tot;double ans;bool comp(line a,line b){ if(a.slope!=b.slope) return a.slope

 

 

 

转载于:https://www.cnblogs.com/AseanA/p/6615976.html

你可能感兴趣的文章
iptables 网址转译 (Network address translation,NAT)
查看>>
ios __block typeof 编译错误解决
查看>>
android 插件形式运行未安装apk
查看>>
ios开发之 manage the concurrency with NSOperation
查看>>
Android权限 uses-permission
查看>>
NSEnumerator用法小结
查看>>
vim如何配置go语言环境
查看>>
机器学习好网站
查看>>
python 中的 sys , os 模块用法总结
查看>>
解题:国家集训队 Middle
查看>>
响应者链
查看>>
指针从函数内部带回返回值
查看>>
在使用webView播放flash或视频文件时无法关闭声音的问题
查看>>
redhat 7 源码安装 mysql5.5.49
查看>>
CCP浅谈
查看>>
NAT虚拟网络配置
查看>>
c#部分---需要实例化的内容;
查看>>
销售类
查看>>
技术项目,问题
查看>>
线程池总结
查看>>