在二維空間上,給定一組線段,能否存在這樣的一條直線,使所有線段在這條直線的投影會在乙個點上。
如果沿著這個投影點做直線的垂線,那麼這條垂線必會與所有的線段相交。那麼本題就轉換為能否找到一條直線與所有的線段相交。
想找這樣的直線,就要去離散化的列舉,本題怎樣有效的列舉是關鍵。
首先假設有一條直線與所有的線段相交,慢慢平移這條直線,使它恰好在某條線段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條線段都存在乙個交點,也就是都相交...