POJ 3384 Feng Shui 半平面交

2021-09-30 15:08:57 字數 1223 閱讀 2343

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的距離,交得乙個新多邊形。在多邊形上找兩個盡量圓的...