by---cxlove
題目:給出乙個凸多邊形的房間,根據風水要求,把兩個圓形地毯鋪在房間裡,不能摺疊,不能切割,可以重疊。問最多能覆蓋多大空間,輸出兩個地毯的圓心座標。多組解輸出其中乙個
題目保證至少可以放入乙個圓,上一題中判斷過在乙個多邊形內是否能放入乙個半徑為r的圓。
同樣將多邊形的邊內移r之後,半平面交區域便是可以放入圓的可行區域。
題目要求覆蓋的面積最大,也就是兩個圓的半徑相同,圓心越遠,面積就越大。
在半平面交區域內找到最遠點對便是題目要求的解。
然後就是注意精度啥啥啥的,聽說這題很詭異,可是我1a了,好奇怪奇怪所以我也不知道哪有trick
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long
#define eps 1e-5
#define inf 1<<30
using namespace std;
struct pointp[1505],tp[1505],q[1505];
double dist(point p1,point p2)
//叉積
double xmul(point p0,point p1,point p2)
//通過兩點,確定直線方程
double get_equation(point p1,point p2,double &a,double &b,double &c)
//求交點
point intersection(point p1,point p2,double a,double b,double c)
//求面積,正為順時針,和叉積寫法有關
double get_area(point p,int n)
}for(int i=1;i<=tmp;i++)
p[i]=tp[i];
p[0]=p[tmp];p[tmp+1]=p[1];
cnt=tmp;
}int slove(point q,int n,double r)
}printf("%.4f %.4f %.4f %.4f\n",p1.x,p1.y,p2.x,p2.y);
}int main()
return 0;
}
POJ 3384 Feng Shui 半平面交
題目給出兩個圓和乙個多邊形 問是否能讓兩個圓在多邊形內。並且覆蓋的面積最大 圓的半徑為r,我們則讓多邊形的每條邊都往內部退r距離。然後求半平面交得出的點集中,最遠的兩個點則是兩圓的圓心即可 include include include include include include include...
半平面交 POJ 3384 Feng Shui
先把每條邊壓縮r的距離,求出半平面交,然後半平面交的最遠點對就是答案了。要注意最後的點數只有乙個時的情況,此時兩個圓重合。但是半平面交求出的平面是不含直線上的點,所以這時半平面交求出的點集為空。我的處理方法是壓縮每一條邊的時候少壓縮一點距離,這樣子求出的點不會是空集,注意把握好精度就可以了。incl...
POJ 3384 Feng Shui 半平面交
風水。是一門藝術。我在想要不要看看 周易 葬經 什麼的,等老了還能出去給人算算命,看看陰宅陽宅什麼的,混口飯吃。嘿嘿,扯遠了。題意 給乙個凸多邊形,然後在裡面放兩個半徑為r的圓。問怎麼放能使覆蓋的面積最大 spj 思路 把多邊形的每一條邊向 內 移r的距離,交得乙個新多邊形。在多邊形上找兩個盡量圓的...