本題可以直接排序再算可以看到全部的那段線段長度,也可以用相似三角形來做,我選擇後者
具體方法:先把障礙物按x從小到大排序,然後就遍歷,令top=l.x1,記得要先連線a[i].x1與hou.x2,再用相似三角形求出要求區域的右端點,在類似的求出區域的左端點,要注意不能超過l.x2,因為最後還要l.x2-top,至於l.x1就不用討論,不影響結果,具體看**
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
#define pi acos(-1)
#define n 50010
#define inf 9999999999
#define eps 1e-8
struct point
a[1000],hou,l;
double f(double x,double h1,double h2)
bool cmp(point s,point t)
if(top0)
printf("%.2f\n",ans);
else
printf("no view\n");
}return 0;
}
zoj 1158 判斷2線段完全相交
乙個正方形的古老墓園,有n面牆,牆的端點都在正方形的邊上。已知墓碑的地點 x,y 問從外面一直到達墓碑至少要鑿開幾個門,而且規定門只能鑿在當前點段的中點。思路很巧妙,因為從乙個點到終點不可能 繞過 圍牆,只能傳過去,所以門是否開在中點是無所謂的,只要求四周線段中點到終點的線段與牆的最少交點個數即可。...
線段是否相交
給定兩條線段,判斷是否相交 include include use sort include use fabs using namespace std struct point 點座標 struct line 線段屬性 void isintersect line line1,line line2 i...
線段相交判斷
1.快速排斥實驗。設以線段p1p2為對角線的矩形為r,設以線段q1q2為對角線的矩形為t,如果r和t不相交,則兩線段不相交。所以p1p2和q1q2相交的必要條件是以他們為對角線的矩形相交,即 min p1.x,p2.x max q1.x,q2.x min q1.x,q2.x max p1.x,p2....