
计算几何模板
maze_illusion
这个作者很懒,什么都没留下…
展开
-
半平面交
//符号判断int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}//点类定义struct Point{ double x,y; Point(){} Point( double _x ,...原创 2018-09-11 12:50:46 · 149 阅读 · 0 评论 -
多边形旋转模板
const double eps = 1e-8;const double pi = acos(-1);int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}struct point{ double x...原创 2018-10-28 15:20:01 · 531 阅读 · 0 评论 -
Pick公式相关
1.以整点为顶点的线段,覆盖的点的个数为GCD(dx,dy)2.Pick公式:顶点坐标均是整点的简单多边形:面积=内部格点数+边上格点数/2-13.任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和...原创 2018-09-10 21:13:05 · 433 阅读 · 0 评论 -
凸包模板
//凸包,Andrew算法//点编号1~n//返回凸包结果Stack[1~Top]Point List[maxn<<1],Stack[maxn<<1]; int Top;bool cmp( Point a , Point b ){ if ( a.x==b.x ) return a.y<b.y; else return a.x<b.x;...原创 2018-07-22 17:01:08 · 269 阅读 · 0 评论 -
计算几何基本模板
const double eps = 1e-8;const double pi = acos(-1.0);//判浮点数符号int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}//Point定义struct ...原创 2018-09-10 14:35:32 · 188 阅读 · 0 评论 -
计算几何知识补充
1.以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy)2.Pick公式:顶点坐标均是整点的简单多边形:面积=内部格点数目+边上格点数目/2-13.任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和三点求圆心坐标(三角形外心)//三点求圆心坐标(三角形外心)Point waixin( Point a , Point b , Point c ){ d...原创 2018-09-12 09:43:10 · 196 阅读 · 0 评论 -
旋转卡壳
一般套路:对散点跑一个凸包出来,然后在凸包上进行旋转卡壳。例如:(旋转卡壳求两凸包最小距离完整代码)#include<map>#include<set>#include<ctime>#include<stack>#include<cmath>#include<queue>#include<vecto...原创 2018-09-11 20:25:16 · 292 阅读 · 0 评论 -
凸包模板(Graham)
//凸包,Graham算法//点编号0~n-1//返回凸包结果Stack[0~Top-1]Point List[maxn],Stack[maxn]; int Top;bool cmp( Point a , Point b ){ double tmp = (a-List[0])^(b-List[0]); if ( tmp>0 ) return true; e...原创 2018-09-11 19:35:00 · 186 阅读 · 0 评论 -
平面最近点对
初始要先按x升序y升序排个序struct Point{ double x,y; Point(){} Point( double _x , double _y ) { x = _x; y = _y; } Point operator -( const Point&b )const { retur...原创 2018-09-11 18:24:26 · 267 阅读 · 0 评论 -
半平面交O(nlogn)版
int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}struct Point{ double x,y; Point(){} Point( double _x , double _y ) ...原创 2018-09-11 17:59:18 · 247 阅读 · 0 评论 -
线段移动(多边形内缩)
向左移动(对应逆时针)://求两点距离double dist( Point a , Point b ){ return sqrt( (a-b)*(a-b) );}//将线段ab往左移动距离rvoid change( Point a , Point b , Point &c , Point &d , double r ){ double dis = ...原创 2018-09-11 14:17:50 · 1657 阅读 · 0 评论 -
线段规范相交与非规范相交
bool norm_Inter( Line l1 , Line l2 ){ double c1 = (l1.e-l1.s)^(l2.s-l1.s); double c2 = (l1.e-l1.s)^(l2.e-l1.s); double c3 = (l2.e-l2.s)^(l1.s-l2.s); double c4 = (l2.e-l2.s)^(l1.e-l2....原创 2018-11-01 14:12:21 · 904 阅读 · 0 评论