二维凸包 二维凸包是计算几何的基础算法。这里是Graham算法 我们首先找到一个一定在凸包上的点,即纵坐标最小的点中,横坐标也最小的点。 然后将其他的点按照与这个点的极角排序 用栈维护,依次扫描这些排序的点 然后如果当前点和栈顶的两个点形成了凸包,就将栈顶弹出。 加入当前点 对于三点共线的情况,我们 ...
分类:
其他好文 时间:
2019-12-27 23:44:57
阅读次数:
101
题目链接:https://vjudge.net/problem/POJ-2007 题意:乱序给出凸包的所有顶点,按极角序输出顶点。 思路:按极角排序一次即可。 AC code: #include<cstdio> #include<cstring> #include<algorithm> #inclu ...
分类:
编程语言 时间:
2019-11-09 13:43:52
阅读次数:
87
【POJ 1696】 Space Ants 【题目大意】 给定多个点,对他们按照下面的规则排序,每个都在前一个点组成的左边,并且连线不相交(典型如图) 【题目分析】 不断进行极角排序,不断选取一定区域内最符合要求的解 【代码】 1 #include<cstdio> 2 #include<iostre ...
分类:
其他好文 时间:
2019-10-07 19:49:01
阅读次数:
106
首先肯定是构造一个完整的凸包包括所有的点,那么要使得刚好有两个点在外面,满足这个条件的只有三种情况。 1.两个在凸包上但是不连续的两个点。 2.两个在凸包上但是连续的两个点。 3.一个在凸包上,还有一个在这个点去掉后这段新凸包边上的一个点。 如何快速的截取新凸包的点是谁呢,我们可以将整个凸包划分区域 ...
分类:
编程语言 时间:
2019-10-04 17:15:37
阅读次数:
85
极角排序 所谓极角,指的就是以x轴正半轴为始边,逆时针转过的角,这个角的范围是[0,2π][0,2π]。 利用atan2函数 atan2(y,x),表示(x,y)这个点与原点连线,这条线与x轴正半轴的夹角,这里的这个极角的范围是[?π,π][?π,π]的,一二象限为正,三四象限为负。所以我们从小到大 ...
分类:
编程语言 时间:
2019-10-03 12:22:27
阅读次数:
72
凸包:用一个凸多边形将所有点围起来,这个凸多边形就是凸包 1.先要引入一个数学工具,向量叉积 |c|=|a×b|=|a| |b|sinα (α为a,b向量之间的夹角) 则 |c| 为向量a ,b所组成的平行四边形的面积 这里是用叉积判断两向量的相对位置关系(非常有用!) 则 a x b < 0 (a ...
分类:
编程语言 时间:
2019-10-01 15:52:22
阅读次数:
116
恢复内容开始 题目链接:https://vjudge.net/problem/POJ-1696 题意:有n个点,规定起点,每次只能向左走,不能与之前的路径交叉,求最多能经过几个点。 思路: 其实这题因为起点的y坐标最小,那么经过的点数一定就是所有的点数n,然后显然我们优先选择偏移角度最小的点作为后继 ...
分类:
编程语言 时间:
2019-09-11 18:13:50
阅读次数:
151
对于初学计算几何的OIer来说,Graham算法是个不错的凸包算法。Graham算法相比极角排序法来说,更为直观也更容易理解。 数据定义 主程序 cpp void input() { //输入所有点 cin n; for(int i = 0; i p[i]; } } int main() { inp ...
分类:
其他好文 时间:
2019-07-15 13:22:38
阅读次数:
102
题面 "传送门" 题解 我们枚举这个凸多边形$y$坐标最小的点$p_i$,然后对于所有$y$坐标大于等于它的点极角排序 我们预处理出$s_{j,k}$表示三角形$p_i,p_j,p_k$内部的点的$b$总和(不包括边界),然后记$dp_{i,j,k}$表示这个凸多边形之前两个点是$p_i,p_j$, ...
分类:
其他好文 时间:
2019-04-21 17:20:37
阅读次数:
148
极角排序扫一圈。 今天没什么状态写个水题减轻负罪感(大雾) 1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <algorithm> 5 #include <vector> 6 using namespace ...
分类:
其他好文 时间:
2019-03-26 00:53:10
阅读次数:
166