点在不在多边形内部:
法1 随机射线 看交点数(排除顶点)
法2 用一圈相邻内积算角度
求多边形重心:
求面积时拆三角形的方法 加权平均
旋转、对称、投影:
变换坐标系,再用矩阵搞线性变换
凸包:
graham扫描(极角)、andrew(水平序)
旋转卡壳:
就是一个two pointers。维护对面对的两个点。
直线和凸包交点:
二分求出两边的最远点(预处理出斜率对应的对踵点?)
然后再在结果中二分
点对凸包切线:
随机一个凸包顶点,连直线,若随机到的不是切点,就把凸包分成了两部分。显然切点分别在这两部分中,因此分别二分。二分时看相邻线的斜率与当前直线的斜率比较。
点到凸包最近距离:
在切线之间三分
凸包到凸包最近点对:
两个凸包同时旋转卡壳,每一次卡到点或者线的时候都求一求距离
闵可夫斯基和:
凸包端点可以看作平面中多个向量。凸包则可以看作集合S,包含所有凸包内的点对应的所有向量。
两个凸包的闵可夫斯基和的意义就是S凸包中任意向量加上(T凸包中任意向量)所形成的新范围
求解方法:!!!!
半平面交:
已有板子
直线和圆的交点:
已知半径,可求直线与圆心距离,即可求角度。
点到圆的切线:
已知半径,可求点到圆心距离,即可求角度。
圆与圆的公切线:
外公切线:已知两个半径,则半径、切线与圆心相连的直线之间形成相似三角形,可求交点,即可求角度。
内公切线:方法大同小异
三角形外接圆:
用中垂线的交求圆心
最小圆覆盖:
随机增量法
公切圆:
给定相切的三个圆,求公切圆
先定义一个概念叫做反演
点P对O做反演,反演点P’,则OPxOP’=0且OP.OP’=1
圆反演之后是圆或直线(反演点在圆内)
两次反演会抵消
对两个已知切点做反演,得到两个平行线和一个圆,作相切圆得答案