Max_QAQ 计算几何
那天睡了一上午觉,如果有漏的知识点提醒一下 qwq .
二维计算几何基础
点、向量、直线
点: .
向量: .
向量的运算():
-
加减:
-
数乘:
-
模长: .
-
幅角:(可以用
atan2
求).因为是 ,所以一般情况极角排序(按幅角排序)可以用斜率排 .
-
点积: .
判断夹角: 锐角, 直角, 钝角 .
-
叉积:(有向面积).
可以看成行列式: .
判断方向: 逆时针, 共线, 顺时针 .
-
旋转: 转 : .
直线:记两个点 ,那么如果向量 ,直线上的点就可以表为 ,限制 可以得到线段或射线 .
点到直线的距离:
- 文化课知识:,距离:
- 叉积算出平行四边形面积然后除以底 .
线段相交:
- 跨立实验:两端点在另一条直线的两侧(叉积判断).
- 需要特殊处理共线情况 .
求交点:解方程 .
特殊情况(三点共线、四点共圆)在某些情形下可以直接扰动解决 .
POJ 3304 Segments
给 条线段,问有没有一条直线,满足这些线段在直线上的投影有公共点 .
.
Solution
考虑找一条过所有线段的直线然后画一条与其垂直的线就好了 .
只需要连每两个线段端点然后判断即可找到一条过所有线段的直线 .
需要特判 .
时间复杂度 .
POJ 2826 An Easy Problem?!
给两块长度相等的板子,天上垂直落下雨滴,问最后接到多少水 .
Solution
就是找到线段最高点连一下算三角形面积,有一个重要边界情况需要特殊处理:
多边形基础
多边形:用顶点表示 .
简单多边形面积:三角剖分,答案等于相邻边叉积和的一半 .
简单多边形重心:三角剖分,三角形是平凡的,然后合并就行了 .
点和多边形的位置关系(PIP):从点出发引一条射线,判断交点奇偶性,可能需要多引几条规避边界问题 .
凸包
凸包就是最小的包含所有给定点的凸多边形 .
上整点凸包点数上界:,证明细节可参考杨景钦 2017 年集训队论文 .
Andrew 算法
单调栈处理即可 .
详细说明 .
动态凸包
动态凸包:带插入删除维护凸包信息 .
每次插入只会改 个点,删除必须先插入,所以维护凸包的结构复杂度均摊下来是没有问题的 . 只需要用平衡树状物维护上下凸壳就可以了 .
练习题(板子):
半平面交
半平面:一条直线一侧的位置 .
凸包和半平面交是对偶问题,所以做法也是基本相似的 . S&I 算法:极角排序后单调栈维护 .
HNOI2012 射箭
有若 条竖着的线段 组成序列 ,画一个过原点的抛物线问过的线段和线段序列 的 LCP 最长是多少 .
.
Solution
起手二分,那么一条抛物线 过 当且仅当:
不等号两个方向分别是一个半平面,跑半平面交判断即可 .
Minkowski 和
定义:两个凸包 的 Minkowski 和 .
就是相当于对于凸包 沿着 的每个向量移动后得到的所有位置的并 .
做法不是很困难,极角排序后归并就行了 . 如果有三点共线情况还需要再求一次凸包 .
JSOI2018 战争
给两个凸多边形 ,若干次操作,每次将 平移一下,操作后问 是否有交 .
的点数和操作次数均不大于 .
Solution
设 上有点 ,那么移动向量 满足有交当且仅当存在 .
可以写成 ,Minkowski 和算 就行了 .
杂项
三维计算几何部分我就不写了 .
Pick 定理
顶点均为整点的简单多边形,面积 、内部格点数和边上格点数满足 .
最小圆覆盖
最小圆覆盖:平面上若干个点,找一个最小的圆包含所有点 .
暴力:枚举三个点 组成一个圆,两个点 作为直径组成一个圆 .
优化:目前枚举到的点不能在最优圆内 .
然后随机打乱复杂度就对了 .
平面最近点对
cdq 分治双指针,复杂度是 或者 的 .
关于复杂度可以发现的是某个点周围有用的点不会很多:
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/17614518.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】