几何
文章平均质量分 51
Khasehemwy
这个作者很懒,什么都没留下…
展开
-
求最多散点覆盖圆(求已知R的圆最多能覆盖的散点)
问题描述: 给n个点,给出圆的r,求在给定r下,圆最多能覆盖多少点?O(n3): 显然肯定有2个点在最多覆盖圆的边界上。可以枚举每2个点,求出以该两点连线为弦的圆,再枚举每个点是否在圆内。O(n2logn): 类似扫描线的做法,以每一个点为圆心化圆,枚举与其相交得圆,保存交点和角度,按角度排序后,扫一遍。参考:[POJ 1981] Circle and Points(单位圆覆盖最多的点)例题:POJ 1981 Circle and Points//O(n2logn)int GetCircleMo原创 2021-11-19 20:47:05 · 1025 阅读 · 0 评论 -
以经纬度求球上两点距离:经纬度板子
例题:POJ 2354 Titanic#include<bits/stdc++.h>#define ll long long#define IOS std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define DEBUG cout<<",here\n";#define Rep(i,l,r) for(int i=(l);i<=(r);i++)using namespace std;const dou原创 2021-11-18 16:07:35 · 235 阅读 · 0 评论 -
求散点最近点对(分治)
散点最近点对: 给一堆二维点,求两个点距离的最小值。求解: 把点按x排序,取x值的中值x=xmid,以x=xmid为中线分割点,分别求左边和右边的最小距离,最后再找有没有两个点分属于左右子集,距离小于左子集和右子集的最小距离。当前集的最小距离为这3个值中的一个。一直左右分治到只剩两个点。P1429 平面最近点对#include<bits/stdc++.h>#define ll long long#define IOS std::ios::sync_with_stdio(false);c原创 2021-10-29 17:17:06 · 220 阅读 · 0 评论 -
求散点最小覆盖矩形(凸包最小外接矩形)
问题描述: 给一堆散点,要求一个最小面积的矩形能覆盖所有的散点。思路: 先散点建立凸包,然后用旋转卡壳的思想枚举边,枚举到每条边时,再找对应的最左、最右、最上方的一个点,这些点一定在外接矩形上,找到面积最小的矩形即可。例题:最小矩形覆盖#include<bits/stdc++.h>#define ll long long#define lf double#define IOS std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0原创 2021-10-23 22:23:38 · 1721 阅读 · 0 评论 -
凸包最大内切圆(二分+半平面交)
定义: 给一个凸包,求这个凸包里能放的最大圆(一般要求半径)。凸多边形的范围等价于各个边的半平面交,可以发现,当凸包各个边向内收缩r时,内切圆的半径就会减少r。当缩到半平面交恰好不存在时,收缩的r就是内切圆的最大半径了。可以二分找收缩的r值,若收缩后半平面交不为空集,则可以存在此半径的圆。题目:POJ - 3525#include<bits/stdc++.h>#define ll long long#define lf double#define IOS std::ios::syn原创 2021-04-26 12:18:30 · 779 阅读 · 0 评论 -
凸包最小外切圆(最小覆盖圆)
定义: 给出平面上的一些点,求覆盖这些点的最小圆。具体问题可见hdu 2215解决:1.求这些离散点的凸包;2.枚举凸包上任意3点形成的三角形,求这些三角形的外切圆,找出所有外切圆中半径最大的一个。细节:1.若枚举的三个点构成钝角三角形,则最大半径为最长边的一半否则,半径 r=a*b*c/(4*S) ,其中S为三角形面积,用叉积很好求。2.钝角三角形判断:若最长边为c,则a*a+b*b<c*c(类比直角三角)//n个点,每次输入一个点的x,y值,每个点有0.5大小的半径,求最小覆盖圆原创 2021-04-24 20:55:43 · 713 阅读 · 0 评论 -
计算几何模板
1.杂项1.1pi计算pi = acos(-1);1.2减小误差尽量少用三角函数、除法、开方、求幂、取对数运算1.0 / 2.0 ∗ 3.0 / 4.0 ∗ 5.0 = ( 1.0 ∗ 3.0 ∗ 5.0 ) / ( 2.0 ∗ 4.0 )a/b > c ---- a > bc1.3判等(x-y)<eps//取代 (x==y)1.4负零小心不要输出-0,比如:double a = -0.00001;printf("%.4lf",a);1.5反三角原创 2021-04-22 11:55:25 · 454 阅读 · 0 评论