poj 3304 Segments 直線 線段求交

2022-08-18 20:48:19 字數 915 閱讀 5465

在二維空間上,給定一組線段,能否存在這樣的一條直線,使所有線段在這條直線的投影會在乙個點上。

如果沿著這個投影點做直線的垂線,那麼這條垂線必會與所有的線段相交。那麼本題就轉換為能否找到一條直線與所有的線段相交。

想找這樣的直線,就要去離散化的列舉,本題怎樣有效的列舉是關鍵。

首先假設有一條直線與所有的線段相交,慢慢平移這條直線,使它恰好在某條線段l1的端點上。當然這個時候直線還是與所有的線段相交。

然後讓直線在這個端點上慢慢旋轉,使到直線又經過線段l2的端點。l2和l1要滿足不是同一條線段,就算相同,你仍可以繼續旋轉,總會讓直線找到l2,且不與l1同一樣的線段。

這樣只要列舉兩條線段的端點做直線,判斷其它的線段是否與這條直線相交即可。列舉過程中要注意所選的兩條線段的端點有可能會在同乙個端點上。

#include

#include

#include

#include

#include

#include

#define eps 1e-10

int n;

struct point

;struct line

p[105];

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

double dis(point p1,point p2)

bool judge(int i,int j,point p1,point p2)

return true;

}int main()

if(flag)

break;

}if(flag)

printf("yes!\n");

else

printf("no!\n");

}system("pause");

return 0;

}

POJ 3304 Segments(計算幾何)

description 給出n條線段,問是否存在一條直線與這n條線段的任一條都相交 input 第一行一整數t表示用例組數,每組用例首先輸入一整數n表示線段數量,之後n行每行四個實數x1,y1,x2,y2分別表示線段兩端點橫縱座標 output 對於每組用例,如果存在一條直線與這n條線段的任一條都相...

poj3304 Segments 計算幾何

poj 3304 最近開始刷計算幾何了 公式好多完全不會 數學不行 幾何不行 記憶力不行 當機 查的題解 就當複習吧 這套專題拿來熟悉一下計算幾何模板 include include includeusing namespace std const double eps 1e 8 int sgn d...

POJ 3304 Segments 簡單幾何

題目大意 給出n條線段,現在問是否存在一條直線,使得所有線段向這條直線的投影存在乙個共同的交點 題目分析 題意有點抽象,需要轉換一下,因為所有的線段向某一條直線的投影存在乙個交點,那麼在那條直線上,從交點位置開始,沿著垂直於直線的方向做另一條直線,會發現這條直線與n條線段都存在乙個交點,也就是都相交...