半平面交
来源:互联网 发布:c语言递归经典实例 编辑:程序博客网 时间:2024/05/11 09:29
首先解决问题:什么是半平面?顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分为两个部分,那么这两个部分就叫做两个半平面。
然后,半平面怎么表示呢?二维坐标系下,直线可以表示为ax + by + c = 0,那么两个半平面则可以表示为ax + by + c >= 0 和ax + by + c < 0,这就是半平面的表示方法。
还有,半平面的交是神马玩意? 其实就是一个方程组,让你画出满足若干个式子的坐标系上的区域(类似于线性规划的可行域),方程组就是由类似于上面的这些不等式组成的。
另外,半平面交可以干什么? 半平面交虽然说是半平面的问题,但它其实就是关于直线的问题。一个一个的半平面其实就是一个一个有方向的直线而已。
半平面交的一个重要应用就是求多边形的核。 多边形的核又是神马玩意? 它是平面简单多边形的核是该多边形内部的一个点集,该点集中任意一点与多边形边界上一点的连线都处于这个多边形内部。就是一个在一个房子里面放一个摄像 头,能将所有的地方监视到的放摄像头的地点的集合即为多边形的核。经常会遇到让你判定一个多边形是否有核的问题。
比如说:
POJ 3335 Rotating Scoreboard
http://acm.pku.edu.cn/JudgeOnline/problem?id=3335
POJ 1474 Video Surveillance
http://acm.pku.edu.cn/JudgeOnline/problem?id=1474
POJ 1279 Art Gallery
http://acm.pku.edu.cn/JudgeOnline/problem?id=1279
这三个题比较简单,裸的半平面交,下面是核心代码(暨半平面交的模板):
半平面交的最终奥义就是求出一个满足条件的凸多边形,而解决这个问题的前提就是直线切割多边形,让直线不断的去切割当前多边形,然后得到新的多边形,然后继续。。。最终得到一个符合条件的多边形,如果最终的多边形顶点数目为0,那么就说明半平面交无解(半平面交的解可以是一个凸多边形,一条直线,一个点,我们用顶点来记录这些解)。关于直线切割多边形,流程是这样的:
对 凸多边形(指的是当前多边形)的每一个顶点,如果这个顶点在直线的指定的一侧(暨在该半平面上),那么就将该顶点直接加入到新的多边形中,否则,看与该点 相邻的多边形上的两个点(判断线段是否和直线相交),如果和直线相交,则把交点加入到新的多边形中。这样,就可以得到一个新的凸多边形。关于最初的多边 形,我们可以设一个四方形的区域,比如说(-1000,-1000),(-1000,1000),(1000,1000),(1000,-1000),然 后开始切割。
POJ 3525 Most Distant Point from the Sea (推荐)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3525
求在多边形中画一个圆的最大半径
可以使用半平面交+ 二分法解。对每个距离进行判定(是否存在区域可以放置圆心,多边形的的每条边向内推进
POJ 3384 Feng Shui (推荐)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3384
半平面交实际应用,用两个圆覆盖一个多边形,问最多能覆盖多边形的面积。
解法:用半平面交将多边形的每条边一起向“内”推进R,得到新的多边形,然后求多边形的最远两点
POJ 1755 Triathlon (推荐)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1755
半平面交判断不等式是否有解。注意特殊情况
POJ 2540 Hotter Colder
http://acm.pku.edu.cn/JudgeOnline/problem?id=2540
半平面交求线性规划可行区域的面积,需要求两点的中垂线。
注意直线切割多边形的时候,向新的点数组(q)里加点的时候,点的顺序必须和原来保持一致(顺时针)
另外还有一个数据比较多的,必须用nlogn的算法解决的半平面交的问题:
http://acm.pku.edu.cn/JudgeOnline/problem?id=2451
Zzy 专为他那篇nlogn算法解决半平面交问题的论文而出的题目,至今不会自己写。
- pku2451 半平面交
- 半平面交
- 半平面交
- poj2540 半平面交
- 半平面交
- poj2451 半平面交
- 半平面交.....
- 半平面交
- POJ3384+半平面交
- HDU1632+半平面交
- POJ3525+半平面交
- POJ2451-半平面交
- 半平面交
- 半平面交
- 半平面交
- 半平面交
- 半平面交
- 半平面交
- 多线程编程杂说3
- 外网无法访问本地IIS站点
- KMP算法初步
- SQL2005性能
- 高性能服务器结构
- 半平面交
- 分页 分组等Linq查询语句例子
- 软件编程的人生
- vmware tools for linux 在ubuntu10.10中安装问题解决
- 旋转卡壳卡卡
- distinct union contact
- 子查询
- 校赛
- Lose sharepoint site (forms-auth) administration rights