计算几何
0ng
某跳动厂农民工
展开
-
A - Axis of Symmetry 2019-2020 ICPC Asia Hong Kong Regional Contest
看着没人发代码,我扔下我的吧我的思路大概就是用一个大的矩形把所有的矩形的围住,然后用四条对称轴去切,判断一个点与对称轴对称的点是否也存在,不存在则不能通过这条对称轴切红色的为对称轴#include<bits/stdc++.h>using namespace std;#define rep(i, a, b) for(int i=(int)(a);i<=(int)(b);i++)const long long MOD = 1e9 + 7;const int MAXN = 5e5原创 2021-03-27 21:15:00 · 189 阅读 · 0 评论 -
bzoj3533【SDOI2014】向量集 (线段树 凸包 三分)
有一个结论:答案一定会出现在凸包上,而且如果y>0则在上凸包上,否则在下凸包上。简单证明:要计算一个向量a和一些向量的点积的最大值。因为所有向量都是共起点的,所以只要找到这些向量终点中在向量a的方向最靠前的,而这个最靠前点一定在凸包上。然后在一个凸包上答案是单峰的,可以用三分来做。于是问题就变成了如何动态维护区间的凸包,这个可以用线段树。可是问题在于每次新加一个点会修改logn段区间,而凸包合并是O(n),显然这个复杂度不能接受。有一个比较巧妙的解决方法,包含未插入位置的线段树节点一定不会.原创 2021-01-22 16:24:13 · 149 阅读 · 0 评论 -
bzoj2300【HAOI2011】防线修建 (动态凸包 平衡树 set)
凸包上删点我不会,那就将删点转成加点。所以我们只要维护一个可以加点的动态凸包就好了。每次加点先判断是否在凸包内,然后用set lowerbound找两边相邻的点,对两边分别进行维护。#include <bits/stdc++.h>#define pb push_back#define memarray(array,val) memset(array,val,sizeof(array))using namespace std;const int mod=1e9+7;const do原创 2021-01-20 17:47:44 · 97 阅读 · 0 评论 -
Simpson积分
几何中的求面积、体积问题,可以用积分的方法,在某个方向上用扫描线或扫描面切过图形,求被覆盖的长度或面积,然后进行积分。 对于这类问题,如果能直接求出面积、体积,或者能列出覆盖长度(面积)关于扫描线(面)的位置的函数,然后手算积分,那当然是再好不过了。但是,如果直接用解析法、公式法比较费时费力,思考难度大,而题目对精度的要求不高(比如精确到0.01,0.001),数据规模不大,可以考虑用积分的方法。 用程序进行积分,一般的方法是矩形(梯形)切割法,但精度比较差。这里用Simpson积分公式,原理.原创 2020-05-15 21:42:19 · 1497 阅读 · 0 评论 -
D - Grandpa's Estate POJ - 1228(稳定凸包)
D - Grandpa’s Estate POJ - 1228当凸包上存在一条边上的点只有端点两个点的时候,这个凸包不是稳定的,因为它可以在这条边外再引入一个点,构成一个新的凸包。但一旦一条边上存在三个点,那么不可能再找到一个点使它扩展成一个新的凸包,否则构成的新多边形将是凹的。也就是说只要凸包上的每一条边上至少有三个点就是稳定凸包了, 那就直接求凸包然后对凸包上的每条边的检查一次...原创 2020-02-13 21:07:00 · 920 阅读 · 0 评论 -
HDU - 546 D - Manors
Some famous theoretical scientists with their wives bought 40952 acres of Prairie Nebraska. They describe it as a square of length 4095. Now they want to build their private manors. Each theoretical ...原创 2020-02-11 21:08:25 · 943 阅读 · 0 评论 -
旋转卡壳
问题:在二维平面上给定n个点,求距离最远的两个点之间的距离是多少?第一反应: n2n^2n2 暴力搞它. 然后瞄一眼范围, woc n=100000, 算了还是摸鱼吧.几个小时月后, 还是学一下怎么求吧.对于上面的问题, 我们进一步思考,这个最远点对一定会出现在这些点集的凸包上. 先求出这个点集的凸包, 然后用下面的算法就能在nlognnlognnlogn 的复杂度求出这个最远距离....原创 2020-02-06 21:13:51 · 3077 阅读 · 1 评论 -
Rotating Scoreboard POJ - 3335 (半平面交)
是是为是是的#include<cstdio>#include<algorithm>#include<cmath>using namespace std;const int MAXN=1e3+5;const double EPS=1e-8;const double PI=acos(-1);inline int sgn(double a){ retu...原创 2020-02-06 16:37:49 · 2848 阅读 · 0 评论 -
凸包——Andrew算法
凸包——Graham-Scan算法Andrew算法 (复杂度nlogn)Andrew算法是一种基于水平序的算法,是Graham-Scan算法的一种变体,性能也更优, 只不过是扫描之前做的处理不同.1:将所有的点按x坐标从小到大排序,横坐标相同则按y坐标从小到大排.2:将p[1]和p[2]加入凸包,然后从p[3]开始判断,判断方式与Graham-Scan算法中一致.3:将所有的点扫描一...原创 2020-02-04 16:13:41 · 3774 阅读 · 0 评论 -
凸包——Graham-Scan算法
凸包(Convex Hull)是一个计算几何(图形学)中的概念。在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造.在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。那么,怎么才能从...原创 2020-02-04 14:57:20 · 4748 阅读 · 6 评论 -
皮克定理
皮克定理:一个神奇数学定理的探寻与证明之路读完之后,也许你们会发现,其实每个人都是有机会成为数学家的。看完的确受益匪浅皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,其中a表示多边形内部的点数,b表示多边形落在格点边界上的点数,S表示多边形的面积。上图中红色点数为a,蓝色点数为b可得多边形面积S=a+b2−1S=a+\frac {b}{2...原创 2020-02-03 15:53:40 · 6386 阅读 · 0 评论 -
判断点在多边形内(射线法)
射线法,用来判断点在多边形的内外,适用于任意多边形时间复杂度:O(n)当射线与多边形的交点个数是奇数时,P在多边形内; 偶数时,P在多边形外。我们通常将射线设为水平向右(哪个方向都可以,只是水平容易写一点而已)图一这种情况计两次或者不计都可图二这种情况只计一次图三这种情况也是计两次或者不计都可最后,根据点数判断点P在多边形内外。注意:点必须有顺序,顺时针或逆时针代码:你品,你...原创 2020-02-02 22:25:10 · 6351 阅读 · 0 评论 -
任意多边形的面积
对于凸多边形,如下图,我们可以以多边形的任意一点为顶点,将其划分成N-2个三角形,计算这N-2个三角形的面积即可。而对于凹多边形,如下图一,很明显我们要求的是图二蓝色的面积,而如果我们直接把构成的三角形直接加起来的话,我们会觉得多加了两次图三红色三角形的面积.但是.!但是.我们求三角形面积时,利用的是向量的叉积,Sabc=12∣AB⃗×AC⃗∣S_{abc}=\frac{1}{2}\mi...原创 2020-02-02 15:21:03 · 1098 阅读 · 0 评论 -
POJ - 3525 E - Most Distant Point from the Sea(半平面交+二分)
POJ - 3525 E - Most Distant Point from the Sea题意:给你一个日本, 日本中有一个地方, 离海的最近距离比其他地方的最近距离都大.要你求该地到海的最近距离.也就是给你一个凸包, 在里面放一个最大的圆, 求出圆的半径解法:可以二分半径每次将所有线段向圆心平移mid个单位长度如果还存在核,则l=mid,否则r=mid代码:#include&l...原创 2020-02-01 18:41:48 · 981 阅读 · 0 评论 -
HDU - 4617 Weapon(基础三维几何 直线之间的距离)
题目链接:click.题意: 给你n个圆,每个圆包括的信息:圆心,圆上的两点,确保三点不成一线.以该圆向两端发射出的射线形成圆柱.求 若其中有圆柱相交,输出"Lucky"否则输出最近两个圆柱的距离解法:题目已给圆心o,圆上的两点a,b可以通过向量oa与向量ob的叉积计算出垂直圆面的向量v,通过o+v得到o’,这样就得到该圆柱体中心轴oo’枚举每两个圆柱体的中心轴,计算之间的距离d...原创 2020-01-31 17:52:20 · 1081 阅读 · 0 评论 -
HDU - 1140 War on Weather(基础三维几何)
题目链接:click.题意:给你 k个卫星的坐标,m个靶子的坐标。问卫星能打到多少靶子。卫星所能到达的最远距离是卫星与地球的切线距离.通过作图观察得,地球圆心到达卫星与其能打击的靶子相连的线段的距离均为地球半径 r ,而与在射程范围外的靶子的距离都小于 r.由此我们可以设卫星与靶子连成的线段到地球圆心的距离为 d通过比较 d 与 r 大小可以知道该卫星是否能打到靶子.代码:#i...原创 2020-01-31 15:00:12 · 2263 阅读 · 0 评论