大白 计算几何专题 凸包、半平面交、平面区域 部分例题练习题总结

来源:互联网 发布:京东关键词优化 编辑:程序博客网 时间:2024/05/18 04:46

LA 2797 Monster Trap

1. 姿势,学习学习, 做法就是将每条线段都延长一些些, 然后判断点到点是否可以直接到达再bfs。

2. 最重要的就是避免穿墙, 除了书上讲的情况外,还要排除

    0 0 4 0

    1 0 2 0

    这一组数据

    或者

    0 0 2 0

    2 0 4 0

这一组数据

当然,如果判断点在线段上的条件不同对这组数据的鲁棒性就不同。

//这道题 你将线段延长多少 和你的eps设成多少 需要达到蜜汁平衡 ……或许是因为我根本不懂计算几何的精度……需要学习

代码:http://paste.ubuntu.com/24460671/


LA 2218 Triathlon

刚好这段时间 wannafly 推荐了一道只有两种路途的 codeforces 536C

总之先将一个人胜过另外一个人的条件等式列出来,具体用半平面交或者是凸包啊什么的列出来了才能知道。

代码:http://paste.ubuntu.com/24459705/


UVA 11726 Crime Scene

题意: 给一些圆或者多边形, 用最短的绳子将其包裹

这个题意就很凸包

处理方法就是把各种切线上在圆上的点都加入到点集中, 在圆内部的点删除,再做凸包, 特殊情况就是只有一个圆的情况

第一次交的时候犯了个错误:

计算圆上a点到b点的弧的弧度的时候,写了一个函数返回的是两半径的夹角。 显然函数只能返回 [0, pi] 优弧就算不出来

求一种角度 (比如弧度、两线夹角) 转化为另外一种角度的时候一定要注意值域是否前后一样

代码:http://paste.ubuntu.com/24459746/


UVA 12307 Smallest Enclosing Rectangle

分别用边长最小、面积最小的矩形包裹凸包

之前做过30个点的poj 最小正方形包裹凸包的题目, 那题是三分的, 并且凸包可能没有一条边和正方形重合

这道题三分的话会超时, 特点是矩形至少有一条边是和凸包的边重合的

做法就是同时转四条边的旋转卡壳, 照着挑战上的思路改了一波

代码: http://paste.ubuntu.com/24459775/



LA 3218 Find the Border

题意: 找出PSLG的边界

/*

首先确定这道题用的算法就是LRJ讲的 “类似卷包裹” 算法,但是在应用这个算法的时候有一个关键点, 线段(直线)是否可以非规范相交

这道题, 包括后面的Street Crossing EXTREME都表明是只能规范相交的,这样题目就比较简单,只需要按照LRJ说的那样(下一行)找下一条边就可以了

-----转弯时如果有多条路可以走,选择那条右转得最厉害的线段。

另外还要注意是否可能三点共线

Art of War好像就是一道可以非规范相交的题目

代码: http://paste.ubuntu.com/24471626/

*/

如果看过刘汝佳的代码的话会发现套下板子就没有了

我认为这个知识点 《入门经典》上写的太模糊,太少了,甚至和他的代码有一定的出入

建议看一下他LA3218的代码

学习PSLG模板后代码:http://paste.ubuntu.com/24485461/


UVA 12296 Pieces and Discs

套板找出不同的块

关键是判圆与多边形是否相交,我第一相反,用之前那个求相交面积的方法,不等于0就是相交

但是写完之后运行发现,求出来的误差实在太大,不相交时面积可能到达3e-12甚至1e-10 而我的eps设置的是1e-12的

思考后我认为,这样求交面积,总共要进行poly.size()次运算,就有可能导致误差的累积

最后老老实实的抄了LRJ的方法,每次运算的结果都单独用于判断(比如说计算一次交点..判断某个点是否在圆内)。

就是自己分类讨论的话未必能讨论清楚。

代码: http://paste.ubuntu.com/24485487/


uva 11595 Crossing Streets EXTREME

划分出区域后,以每个多边形做无向图中的一个节点,判断起点与终点落在哪个多边形中,做最短路就可以了

我在做这道题的时候,在外面套了一个边长为 2inf 的正方形, inf 设小了会WA我知道。 设大了就不能正确找出所有区域,这我就不是很能理解了,可能又是精度误差的锅。 

当然这个边长其实可以动态设置。

代码:http://paste.ubuntu.com/24485527/


LA 3176 Art of War

不能理解为什么我的代码不能找出每个首都属于的多边形, 会RE,还弄不到数据……



计算几何暂时告一段落, 之后刷CF、区域赛的计算几何,大白的题目有些真的有点年头了

0 0
原创粉丝点击