摘要: http://poj.org/problem?id=3384给定一个多边形,在多边形内放有两个相同的圆,使两个圆尽可能多的覆盖多边形。输出最终两个圆心的位置。最优的放置方法必定是圆内切于两条边,那么把所有的边向内推移半径R的距离,得到新的多边形(也有可能是一个点或一条直线),求出新多边形相距最远的两个顶点,这两个顶点就是圆心的位置了。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<iostream> 4 #include<cmath> 5 using namespace std; 6 co 阅读全文
posted @ 2011-05-07 23:58 CoderZhuang 阅读(208) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3525求多边形最大内接圆半径。半平面交+二分查找:把多边形的每条边向内推R的距离,若变幻之后的仍是一个多边形,说明距离R太小了,若无边说明R过大。这边有两个纯几何上的问题,就是如果求直线和平移直线。一、已知两点求直线ax+by+c=0: 已知两点为A(x[i],y[i]),B(x[i+1],y[i+1]),取直线上的另外一点C(x,y),则有: (x-x[i])/(y-y[i])=(x[i+1]-x[i])/(y[i+1]-y[i]); 化解得: x(y[i+1]-y[i])+y(x[i]-x[i+1])+x[i+1... 阅读全文
posted @ 2011-05-07 22:25 CoderZhuang 阅读(173) 评论(0) 推荐(0) 编辑