pku 1039 Pipe 叉積的應用

2022-05-24 02:06:09 字數 1095 閱讀 2001

黑書上的一道題目:

題意:有一寬度為1的折線管道,上面頂點為(xi,yi),所對應的下面頂點為(xi,yi-1),假設管道都是不透明的,不反射的,光線從左邊入口處的(x0,y0),(x,y0-1)之間射入,向四面八方傳播,求解光線最遠能傳播到**(取x座標)或者是否能穿透整個管道.

如果一根光線自始至終都未擦到任何頂點,那麼它肯定不是最優的,因為可以通過平移來使之優化,如果只碰到乙個頂點,那也不是最優的,可以通過旋轉,使它碰到另乙個頂點,並且更優,即最優光線一定擦到乙個上頂點和乙個下頂點.

這樣列舉所有的上下兩個轉折點形成線段,然後從0到n列舉所有轉折點如果與之相交則滿足,直到找到不想交的然後計算x,找出最大的x即可。

#include #include #include #define maxn 21

using namespace std;

const double eps = 1e-8;

struct point

up[maxn],down[maxn];

int n;

int dblcmp(double x)

double det(double x1,double y1,double x2,double y2)

double cross(point a,point b,point c)

double getx(point a,point b,point c,point d)

void solve()

double temp = 0;

//計算x,並求出最大

if (k < max(i,j)) continue;

temp = getx(up[i],down[j],up[k],up[k - 1]);

if (temp > ans) ans = temp;

temp = getx(up[i],down[j],down[k],down[k - 1]);

if (temp > ans) ans = temp;

if (k >= n)}}

printf("%.2lf\n",ans);

}int main()

solve();

}return 0;

}

PKU1039 Pipe 計算幾何線段交點

模板 給定l1上兩點 ax,ay bx,by l2上兩點 cx,cy dx,dy 求兩直線交點 x,y double cross double x1,double y1,double x2,double y2 void intersec point a,point b,point c,point d...

poj 1039 Pipe (計算幾何)

題目 劉汝佳的黑書 演算法藝術與資訊學競賽 上的第3章計算幾何初步的例2 管道問題 有一寬度為1的折線管道,上面頂點為 xi,yi 所對應的下面頂點為 xi,yi 1 假設管道都是不透明的,不反射的,光線從左邊入口處的 x1,y1 x1,y1 1 之間射入,向四面八方傳播,求解光線最遠能傳播到 取x...

POJ 1039 Pipe(計算幾何)

有一寬度為1的折線管道,上面頂點為 xi,yi 所對應的下面頂點為 xi,yi 1 假設管道都是不透明的,不反射的,光線從左邊入口處的 x1,y1 x1,y1 1 之間射入,向四面八方傳播,求解光線最遠能傳播到 取x座標 或者是否能穿透整個管道。最遠的直線必定經過乙個上折點和乙個下折點。列舉這兩個點...