POJ 3384 Feng Shui 半平面交

2021-06-18 23:15:18 字數 2043 閱讀 5732

題目給出兩個圓和乙個多邊形

問是否能讓兩個圓在多邊形內。

並且覆蓋的面積最大

圓的半徑為r,我們則讓多邊形的每條邊都往內部退r距離。

然後求半平面交得出的點集中,最遠的兩個點則是兩圓的圓心即可

#include #include #include #include #include #include #include #include #include #include #include #define maxn 111111

#define maxm 211111

#define pi acos(-1.0)

#define eps 1e-8

#define inf 1000000001

using namespace std;

int dblcmp(double d)

struct point

point(double _x, double _y):

x(_x), y(_y){};

void input()

double dot(point p)

double distance(point p)

point sub(point p)

double det(point p)

bool operator == (point a)const

bool operator < (point a)const

}p[maxn];

struct line

line(point _a,point _b)

bool parallel(line v)

point crosspoint(line v)

bool operator == (line v)const

};struct halfplane:public line

//表示向量 a->b逆時針(左側)的半平面

halfplane(point _a, point _b)

halfplane(line v)

void calcangle()

bool operator <(const halfplane &b)const };

struct polygon

}void getarea()

area = fabs(area) / 2;

}}convex;

struct halfplanes

void unique()

n = m;

} bool halfplaneinsert()

while (st < ed && dblcmp(hp[que[st]].b.sub(hp[que[st]].a).det(p[ed].sub(hp[que[st]].a))) < 0) ed--;

while (st < ed && dblcmp(hp[que[ed]].b.sub(hp[que[ed]].a).det(p[st + 1].sub(hp[que[ed]].a))) < 0) st++;

if (st + 1 >= ed)return false;

return true;

} void getconvex(polygon &con) }

}h;int t;

int n;

line getmove(point a, point b, double mid)

double r;

int main()

h.halfplaneinsert();

h.getconvex(convex);

int id1 = 0, id2 = 0;

double mx = 0;

for(int i = 0; i < convex.n; i++)

for(int j = i + 1; j < convex.n; j++)

printf("%f %f %f %f\n", convex.p[id1].x, convex.p[id1].y, convex.p[id2].x, convex.p[id2].y);

}return 0;

}

半平面交 POJ 3384 Feng Shui

先把每條邊壓縮r的距離,求出半平面交,然後半平面交的最遠點對就是答案了。要注意最後的點數只有乙個時的情況,此時兩個圓重合。但是半平面交求出的平面是不含直線上的點,所以這時半平面交求出的點集為空。我的處理方法是壓縮每一條邊的時候少壓縮一點距離,這樣子求出的點不會是空集,注意把握好精度就可以了。incl...

POJ 3384 Feng Shui 半平面交

by cxlove 題目 給出乙個凸多邊形的房間,根據風水要求,把兩個圓形地毯鋪在房間裡,不能摺疊,不能切割,可以重疊。問最多能覆蓋多大空間,輸出兩個地毯的圓心座標。多組解輸出其中乙個 題目保證至少可以放入乙個圓,上一題中判斷過在乙個多邊形內是否能放入乙個半徑為r的圓。同樣將多邊形的邊內移r之後,半...

POJ 3384 Feng Shui 半平面交

風水。是一門藝術。我在想要不要看看 周易 葬經 什麼的,等老了還能出去給人算算命,看看陰宅陽宅什麼的,混口飯吃。嘿嘿,扯遠了。題意 給乙個凸多邊形,然後在裡面放兩個半徑為r的圓。問怎麼放能使覆蓋的面積最大 spj 思路 把多邊形的每一條邊向 內 移r的距離,交得乙個新多邊形。在多邊形上找兩個盡量圓的...