題目鏈結解法:求是否存在一條直線,穿過所有線段,
若存在,那麼一定可以通過旋轉或平移,使得該直線穿過兩線段端點
那麼暴力列舉任意兩個端點,構造直線,檢驗是否穿過所有線段(叉乘判斷)
即可模板部落格
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
const double eps = 1e-8;
const double inf = 1e20;
const double pi = acos(-1.0);
const int maxp = 1010;
//`compares a double to zero`
int sgn(double x)
//square of a double
inline double sqr(double x)
struct point
point(double _x,double _y)
void input()
void output()
bool operator == (point b)const
bool operator < (point b)const
bool pointonseg(point p)
//`兩向量平行(對應直線平行或重合)`
bool parallel(line v)
//`兩線段相交判斷`
//`2 規範相交`
//`1 非規範相交`
//`0 不相交`
int segcrossseg(line v)
//`直線和線段相交判斷`
//`-*this line -v seg`
//`2 規範相交`
//`1 非規範相交`
//`0 不相交`
int linecrossseg(line v)
//`兩直線關係`
//`0 平行`
//`1 重合`
//`2 相交`
int linecrossline(line v)
//`求兩直線的交點`
//`要保證兩直線不平行或重合`
point crosspoint(line v)
//點到直線的距離
double dispointtoline(point p)
//點到線段的距離
double dispointtoseg(point p)
//`返回線段到線段的距離`
//`前提是兩線段不相交,相交距離就是0了`
double dissegtoseg(line v)
//`返回點p在直線上的投影`
point lineprog(point p)
//`返回點p關於直線的對稱點`
point symmetrypoint(point p)
};int t;
int n;
point p[210];
line l[210];//注意大小
int main()
int flag=0;
for(int i=1;i<2*n;i++)
else break;
}if(flag==n)
}if(flag==n) break;
} if(flag==n)
else puts("no!");
}}
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條線段都存在乙個交點,也就是都相交...