标签:
Description
Input
Output
Sample Input
5 0 0 4 4 0 4 4 0 5 0 7 6 1 0 2 3 5 0 7 6 3 -6 4 -3 2 0 2 27 1 5 18 5 0 3 4 0 1 2 2 5
Sample Output
INTERSECTING LINES OUTPUT POINT 2.00 2.00 NONE LINE POINT 2.00 5.00 POINT 1.07 2.20END OF OUTPUT
输出要用 .2f
坑啊
ACcode:
#include <cstdio> #include <cmath> #define eps 1e-8 int sgn(double x){ if(fabs(x)<eps)return 0; if(x<0)return -1; return 1; } struct Point{ double x,y; Point(){}; Point(double _x,double _y){ x=_x; y=_y; } bool operator == (Point b)const{ return sgn(x-b.x)==0&&sgn(y-b.y)==0; } Point operator - (const Point &b)const{ return Point(x-b.x,y-b.y); } double operator ^ (const Point &b)const{ return x*b.y-y*b.x; } double operator * (const Point &b)const{ return x*b.x+y*b.y; } }; struct Line{ Point s,e; Line(){} Line(Point _s,Point _e){ s=_s; e=_e; } bool parallel(Line v){ return sgn((e-s)^(v.e-v.s))==0; } int relation(Point p){ int c=sgn((p-s)^(e-s)); if(c<0)return 1; if(c>0)return 2; return 3; } int linecrossline(Line v){ if((*this).parallel(v)) return v.relation(s)==3; return 2; } Point crosspoint(Line v){ double a1 = (v.e-v.s)^(s-v.s); double a2 = (v.e-v.s)^(e-v.s); return Point((s.x*a2-e.x*a1)/(a2-a1),(s.y*a2-e.y*a1)/(a2-a1)); } }; int main(){ int n; while(~scanf("%d",&n)){ puts("INTERSECTING LINES OUTPUT"); while(n--){ double x1,x2,x3,x4,y1,y2,y3,y4; scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4); Line a(Point(x1,y1),Point(x2,y2)),b(Point(x3,y3),Point(x4,y4)); int flag=a.linecrossline(b); if(flag==0){ puts("NONE"); } else if(flag==1){ puts("LINE"); } else if(flag==2){ Point tmp=a.crosspoint(b); printf("POINT %.2f %.2f\n",tmp.x,tmp.y); } } puts("END OF OUTPUT"); } return 0; }
POJ 1269 Intersecting Lines 直线相交判断
标签:
原文地址:http://blog.csdn.net/zp___waj/article/details/51366999