[POJ 3384]

Feng Shui

半平面交

题意:给出一个凸多边形描述,问如何在凸多边形内放两个半径都为r的圆,使两圆覆盖区域并集的面积最大。两圆可以重叠,但重叠部分面积不累加。圆不能超出凸多边形的边界。题目保证有解,若有多解,输出任意一组。

根据题意,目标要使两圆重叠区域最小。很容易推出可行的圆心区域是原凸多边形各边向内“塌缩”r后围成的新多边形。那么,在这个新多边形内,找出距离最远的两个端点即可。

实现起来也不太难,由于数据规模不大(n最多100),直接用了O(n^3)的方法。具体做法是,首先算出各边沿斜率直角方向向内平移r后的新方程,然后求各直线间的交点。由于塌缩后,某些直线会完全位于有效区域之外,因此,对于这O(n^2)个交点,需要再用n条新直线方程判是否有效。最后,在剩余的交点中找出距离最远的两个即可。