![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算几何基本算法
_Shmily
这个作者很懒,什么都没留下…
展开
-
石油大----Contest2003 - 2020年秋季组队训练赛第七场--Problem L、Largest Quadrilateral (平面找四点组成面积最大的四边形,旋转卡壳)
题面:题意:平面上给定 nnn 个点,这 nnn 个点中选四个点组成一个四边形,问这个四边形的面积最大是多少。题解:很明显,最优解的四个点一定都在凸包上。先求解凸包。若凸包上面的点 ≤2\le2≤2 ,那么说明这些点共线或者重合。面积为 000。若凸包上面的点 =3=3=3,则四边形的三个顶点为这三个点,剩余的那一个点选自凸包内部。枚举即可。若凸包上面的点 >=4>=4>=4,我们枚举凸包上面的任意两点,在这两点的两侧分别求解一个面积最大的三角形,两个三角形相加即为在当前原创 2020-09-12 17:13:00 · 320 阅读 · 1 评论 -
P3194 [HNOI2008]水平可见直线 (直线交)
题目链接题面:题解:我们先按照直线的斜率从小到大排序,斜率相同按照b从大到小排序。现在考虑按照斜率排好序的三条直线 i - 1 ,i ,i +1若 i 与 i + 1 的交点在 i 与 i - 1 交点的左侧,那么 i 不可见。代码:#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include&原创 2020-08-25 08:03:02 · 90 阅读 · 0 评论 -
P4724 【模板】三维凸包
题目连接题面:代码:#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#include<map>#include<vector>#define ll原创 2020-08-24 22:23:06 · 115 阅读 · 0 评论 -
P1742 最小圆覆盖 (计算几何)
题目链接题面:题解:求最小圆覆盖。随机增量法,期望复杂度O(n)。先将所有的点随机打乱。定理1: 如果点p不在集合S的最小覆盖圆内,则p一定在S∪{p}的最小覆盖圆上。根据这个定理,我们可以分三个for确定前i个点的最小覆盖圆。1.令前i-1个点的最小覆盖圆为C2.如果第i个点在C内(包括边界),则前i个点的最小覆盖圆也是C3.如果不在,那么第i个点一定在前i个点的最小覆盖圆上,接着确定前i−1个点中还有哪两个在最小覆盖圆上。因此,设当前圆心为Pi,半径为0,做固定了第i个点的前i个点原创 2020-08-25 08:04:49 · 393 阅读 · 0 评论 -
P4196 [CQOI2006]凸多边形 /【模板】半平面交
题目连接题面:计算几何就是。。。。贴板子。#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#include<map>#include<vector>原创 2020-08-24 22:24:13 · 98 阅读 · 0 评论 -
三维几何——三维凸包:
时间复杂度和空间复杂度都是O(n*n)级别的。#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include&...原创 2020-08-24 21:03:42 · 336 阅读 · 0 评论 -
三维几何——点类、线类、平面类:
未经过题目测试。。。#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>...原创 2020-08-24 21:03:28 · 299 阅读 · 0 评论 -
二维几何——平面最远点对:
求个凸包,然后在凸包上求:时间复杂度大概是 O(nlogn+n):#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>...原创 2020-08-24 21:03:19 · 331 阅读 · 0 评论 -
二维几何——平面最近点对:
存个模板:是用分治写的时间复杂度 nlogn但是本题好像还有一种玄学做题法:我们充分发扬人类智慧:将所有点全部绕原点旋转同一个角度,然后按x坐标排序根据数学直觉,在随机旋转后,答案中的两个点在数组中肯定不会离得太远所以我们只取每个点向后的5个点来计算答案这样速度快得飞起,在n=1000000时都可以在1s内卡过。。。#include<iostream>#include...原创 2020-08-24 21:03:10 · 314 阅读 · 0 评论 -
二维几何——模板汇总:
就是从点类开始。。。但是都没有正式用题目测试过,也不知道对错。。。#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>...原创 2020-08-24 22:01:01 · 134 阅读 · 0 评论 -
二维几何——多圆类:
主要计算面积并、面积交,覆盖多次面积:const int maxn=1010;struct circles{ circle c[maxn]; double ans[maxn];//ans[i] 表示被覆盖了i次的面积 double pre[maxn]; int n; circles(){ n=0;} void add(circle cc)...原创 2020-08-24 21:02:58 · 180 阅读 · 0 评论 -
二维几何——半平面类:
主要计算半平面交//半平面交struct halfplane:public Line{ double angle; halfplane(){} //表示向量 s->e 逆时针 (左侧) 的半平面 halfplane(Point ss,Point ee) { s=ss,e=ee; } halfplane(Line v...原创 2020-08-24 21:02:46 · 426 阅读 · 0 评论 -
二维几何——最小矩形面积覆盖,直线切凸多边形:
也未经过题目测试。。。。//AB X ACdouble cross(Point A,Point B,Point C){ return (B-A)^(C-A);}//AB*ACdouble dot(Point A,Point B,Point C){ return (B-A)*(C-A);}//最小矩形面积覆盖// A 必须是凸包 (而且是逆时针顺序)doub...原创 2020-08-24 21:02:37 · 350 阅读 · 0 评论 -
二维几何——多边形类:
未经过题目测试。。。。struct polygon{ int n; Point p[maxp]; Line l[maxp]; void input(int nn) { n=nn; for(int i=0;i<n;i++) p[i].input(); } void add(P...原创 2020-08-24 21:02:18 · 339 阅读 · 0 评论 -
二维几何——圆类:
这些代码未经过题目测试,存在安全隐患。。。。struct circle{ Point p; double r; circle(){} circle(Point pp,double rr) { p=pp,r=rr; } circle(double xx,double yy,double rr) { p...原创 2020-08-24 22:00:52 · 199 阅读 · 0 评论 -
二维几何——线类:
这些代码未经过题目测试,存在安全隐患。。。。struct Line{ Point s,e; Line(){} //两点 Line(const Point ss,const Point ee) { s=ss,e=ee; } //点斜 Line(const Point p,const double angle)...原创 2020-08-24 21:02:07 · 134 阅读 · 0 评论 -
二维几何——点类,常量设置:
这些代码未经过测试,存在安全隐患。。。。const double eps=1e-8;const double dnf=1e20;const double pi=acos(-1.0);const int maxp=1010;//浮点型数值是否为0int sgn(double x){ if(abs(x)<eps) return 0; if(x<0) ret...原创 2020-08-24 21:01:59 · 124 阅读 · 0 评论