1. 前置知识点(1) pi = acos(-1);(2) 余弦定理 c^2 = a^2 + b^2 - 2abcos(t)2. 浮点数的比较
const double eps = 1e-8;
int sign(double x)  // 符号函数
{if (fabs(x) < eps) return 0;if (x < 0) return -1;return 1;
}
int cmp(double x, double y)  // 比较函数
{if (fabs(x - y) < eps) return 0;if (x < y) return -1;return 1;
}3. 向量3.1 向量的加减法和数乘运算3.2 内积(点积) A·B = |A||B|cos(C)(1) 几何意义:向量A在向量B上的投影与B的长度的乘积。(2) 代码实现double dot(Point a, Point b){return a.x * b.x + a.y * b.y;}3.3 外积(叉积) AxB = |A||B|sin(C)(1) 几何意义:向量A与B张成的平行四边形的有向面积。B在A的逆时针方向为正。(2) 代码实现double cross(Point a, Point b){return a.x * b.y - b.x * a.y;}3.4 常用函数3.4.1 取模double get_length(Point a){return sqrt(dot(a, a));}3.4.2 计算向量夹角double get_angle(Point a, Point b){return acos(dot(a, b) / get_length(a) / get_length(b));}3.4.3 计算两个向量构成的平行四边形有向面积double area(Point a, Point b, Point c){return cross(b - a, c - a);}3.4.5 向量A顺时针旋转C的角度:Point rotate(Point a, double angle){return Point(a.x * cos(angle) + a.y * sin(angle), -a.x * sin(angle) + a.y * cos(angle));}
4. 点与线4.1 直线定理(1) 一般式 ax + by + c = 0(2) 点向式 p0 + vt(3) 斜截式 y = kx + b4.2 常用操作(1) 判断点在直线上 A x B = 0(2) 两直线相交// cross(v, w) == 0则两直线平行或者重合Point get_line_intersection(Point p, Vector v, Point q, vector w){vector u = p - q;double t = cross(w, u) / cross(v, w);return p + v * t;}(3) 点到直线的距离double distance_to_line(Point p, Point a, Point b){vector v1 = b - a, v2 = p - a;return fabs(cross(v1, v2) / get_length(v1));}(4) 点到线段的距离double distance_to_segment(Point p, Point a, Point b){if (a == b) return get_length(p - a);Vector v1 = b - a, v2 = p - a, v3 = p - b;if (sign(dot(v1, v2)) < 0) return get_length(v2);if (sign(dot(v1, v3)) > 0) return get_length(v3);return distance_to_line(p, a, b);}(5) 点在直线上的投影Point get_line_projection(Point p, Point a, Point b){Vector v = b - a;return a + v * (dot(v, p - a) / dot(v, v));}(6) 点是否在线段上bool on_segment(Point p, Point a, Point b){return sign(cross(p - a, p - b)) == 0 && sign(dot(p - a, p - b)) <= 0;}(7) 判断两线段是否相交bool segment_intersection(Point a1, Point a2, Point b1, Point b2){double c1 = cross(a2 - a1, b1 - a1), c2 = cross(a2 - a1, b2 - a1);double c3 = cross(b2 - b1, a2 - b1), c4 = cross(b2 - b1, a1 - b1);return sign(c1) * sign(c2) <= 0 && sign(c3) * sign(c4) <= 0;}
5. 多边形5.1 三角形5.1.1 面积(1) 叉积(2) 海伦公式p = (a + b + c) / 2;S = sqrt(p(p - a) * (p - b) * (p - c));5.1.2 三角形四心(1) 外心,外接圆圆心三边中垂线交点。到三角形三个顶点的距离相等(2) 内心,内切圆圆心角平分线交点,到三边距离相等(3) 垂心三条垂线交点(4) 重心三条中线交点(到三角形三顶点距离的平方和最小的点,三角形内到三边距离之积最大的点)5.2 普通多边形通常按逆时针存储所有点5.2.1 定义(1) 多边形由在同一平面且不再同一直线上的多条线段首尾顺次连接且不相交所组成的图形叫多边形(2) 简单多边形简单多边形是除相邻边外其它边不相交的多边形(3) 凸多边形过多边形的任意一边做一条直线,如果其他各个顶点都在这条直线的同侧,则把这个多边形叫做凸多边形任意凸多边形外角和均为360°任意凸多边形内角和为(n−2)180°5.2.2 常用函数(1) 求多边形面积(不一定是凸多边形)我们可以从第一个顶点除法把凸多边形分成n − 2个三角形,然后把面积加起来。double polygon_area(Point p[], int n){double s = 0;for (int i = 1; i + 1 < n; i ++ )s += cross(p[i] - p[0], p[i + 1] - p[i]);return s / 2;}(2) 判断点是否在多边形内(不一定是凸多边形)a. 射线法,从该点任意做一条和所有边都不平行的射线。交点个数为偶数,则在多边形外,为奇数,则在多边形内。b. 转角法(3) 判断点是否在凸多边形内只需判断点是否在所有边的左边(逆时针存储多边形)。5.3 皮克定理皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式该公式可以表示为:S = a + b/2 - 1其中a表示多边形内部的点数,b表示多边形边界上的点数,S表示多边形的面积。
6. 圆(1) 圆与直线交点(2) 两圆交点(3) 点到圆的切线(4) 两圆公切线(5) 两圆相交面积

求解凸包

void get_convex()
{sort(q, q + n);for (int i = 0; i < n; i ++ ){while (top >= 2 && sign(area(q[stk[top - 2]], q[stk[top - 1]], q[i])) <= 0)used[stk[ -- top]] = false;stk[top ++ ] = i;used[i] = true;}used[0] = false;for (int i = n - 1; i >= 0; i -- ){if (used[i]) continue;while (top >= 2 && sign(area(q[stk[top - 2]], q[stk[top - 1]], q[i])) <= 0)top -- ;stk[top ++ ] = i;}top -- ;
}

算法竞赛--计算几何相关推荐

  1. 成为计算几何master之路——记算法竞赛中常用的计几算法及思想

    文章目录 成为计算几何MASTER(FAKE)之路 1 引言 1.1 精度 1.2 剖分 1.3 层次化设计 2 点,向量和线 2.1 点积和叉积 2.2 线段(直线) 2.2.1 点在线段上判定 2 ...

  2. c语言二分法查找一个数_算法竞赛小专题系列(1):二分法、三分法

    本系列是这本算法教材的扩展资料:<算法竞赛入门到进阶>. 罗勇军.郭卫斌. 清华大学出版社 二分法和三分法是算法竞赛中常见的算法思路,本文介绍了它们的理论背景.模板代码.典型题目. 1. ...

  3. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》

    罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...

  4. 在线计算机 授课,在线计算机教育网站计蒜客改版 推出算法竞赛课程

    [赛迪网讯]4月16日消息,近日,新型在线计算教育平台计蒜客进行了重大改版,网站从底层架构到课程内容都进行了大幅调整.计蒜客新版除了服务速度和稳定性大幅提升外,还对用户的学习体验进行了优化:同时,计蒜 ...

  5. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  6. 我的所有优质博客全部开源啦(我自己原创的《ACM模板》《算法全家桶》《算法竞赛中的初等数论》 PDF免费下载)

    你好呀ヾ(≧▽≦*)o 我是繁凡さん 这两年来我写了很多长篇文章,主要涉及数据结构,算法,程序设计竞赛,数学,计算几何等方面的内容: <数据结构>C语言版(清华严蔚敏考研版) 全书知识梳理 ...

  7. 二分法、三分法 --算法竞赛专题解析(1)

    本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当      作者签名书 如有建议, ...

  8. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  9. 算法竞赛从入门到进阶pdf_好书送不停 | 算法竞赛入门到进阶

    本书内容: 本书是算法竞赛的入门和进阶教材,包括算法思路.模板代码.知识体系.赛事相关等内容.本书把竞赛常用的知识点和竞赛题结合起来,讲解清晰.透彻,帮助初学者建立自信心,快速从实际问题入手,模仿经典 ...

最新文章

  1. 魅族大数据之流平台设计部署实践--转
  2. php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容
  3. GIMP 2.10教程
  4. Mysql常用基础命令操作实战
  5. 操作篇 ARP协议欺诈
  6. input 输入值的监听 禁止输入特殊字符
  7. 机器学习笔记(十二):聚类
  8. gis影像格式img转为ecw_医学影像图片格式
  9. Python高级知识点学习(九)
  10. 01-centos安装界面,远程连接
  11. 解决企业IT三大运维管理难题
  12. mysql数据库获得树的节点
  13. 阿里巴巴java开发手册-嵩山版 下载
  14. 【转】J2SDK1.5+TOMCAT5.5 最详细有效安装及配置
  15. 小米盒子尚“健在”傍CNTV挑逗广电总局
  16. 为什么说php开发成本低,PHP、JSP和.NET三种语言的对比中开发成本最低的是?
  17. 2019年最实用的导航栏设计实践和案例分析全解
  18. html网页字体出现模糊,浏览器打开网页字体模糊问题的解决方法
  19. 【CH9434】使用CH9434移植到32单片机扩展4串口
  20. 前端:时间( ISO)标准时间转换为时间戳

热门文章

  1. oracle对某两列求和再求和_分手后4个阶段这样挽回,再狠的他也会心软求和
  2. 腾讯成立“XR”部门押注元宇宙;iPhone14全系售价上涨;新东方5 万高薪聘请双语主播 |聚观早报
  3. Android修行手册 - TextureView和SurfaceView的属性方法以及示例
  4. vue 监听输入法方法(js)
  5. 以梦为马,扬帆起航,双非人的2021,万字逐梦旅
  6. 三个理由告诉你 为什么社保不能断缴
  7. python 如何添加国内源_pip和conda添加国内清华镜像源(亲测有效)
  8. 苹果8.1系统无服务器,iOS9强制降级iOS8教程
  9. 【 Vue 】暗黑模式切换
  10. 兼职平台java设计_基于jsp的高校兼职平台-JavaEE实现高校兼职平台 - java项目源码...