poj 1039 Pipe 直線線段相交判斷 列舉

2022-08-18 20:48:18 字數 1046 閱讀 4073

黑書p359例題
題目要我們求出光線在pipe裡能射到的最遠處的x座標。我們只要找出其中一條最優光線。
一條最優光線必須滿足的乙個必要條件是:它必定過pipe的乙個上頂點和乙個下頂點。否則,我們總可以通過平移或是旋轉使光線走更遠的距離。有了這個條件,就可以通過列舉所有的上下頂點對(i,j),找出最優的。
過上下頂點的光線共有n*n條,要求的就是
max (i=0..n-1,j=0..n-1;)

光線(i,j)要能進入了k-1到k這一節,則它比與(0,0)..(k-1,k-1)都相交。並且當(i,j)與(0,0)..(k-1,k-1)都相交,而與(k,k)不交時,他必與上邊或下邊(k-1,k)相交。顯然當k<=max(i,j)時,我們便不用處理(i,j),因為它或者不是最優光線,或者會在其他的(i』,j』)求出。對k>max(i,j),求出(i,j)與上/下邊(k-1,k)的交點的x座標,並與當前最大值比較,決定取捨。
#include

#include

#include

#include

#include

#define eps 1e-8

using namespace std;

int n;

struct point

;struct it

p[25];

double multi(point p0,point p1,point p2)

point inter(point u1,point u2,point v1,point v2)

bool judge(point p1,point p2,point p3,point p4)

double work(int i,int j)

if(fabs(ans-p[n-1].a.x)

printf("through all the pipe.\n");

else

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

}return  0;

}

POJ 1039 Pipe 線段相交

題目 給乙個管子,有很多轉彎處,問從管口的射線射進去最長能射到多遠 題解 根據黑書,可以證明的是這條光線一定經過了乙個上頂點和下頂點 所以我們列舉每對上下頂點就可以了 include include include include define eps 1e 5 using namespace st...

POJ 1039 Pipe (列舉,判線段相交)

題目大意 一根由平行線段組成的管道,給出管道的上端折點,下端折點比上端折點高度少1。有一束光從入口射入,求可以照到的最遠位置。思路 列舉任意兩點,從入口處開始判斷光線是否通過折點出 即與折點豎直線段相交 記錄最遠位置並判斷,輸出即可。開始腦抽,總覺的光要沿著入口上下點射入。放了三天果斷1a了。mem...

poj 1039 Pipe (計算幾何)

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