首页 > 代码库 > 直线相交 POJ 1269

直线相交 POJ 1269

 1 // 直线相交 POJ 1269 2  3 // #include <bits/stdc++.h> 4 #include <iostream> 5 #include <cstdio> 6 #include <cstdlib> 7 #include <algorithm> 8 #include <math.h> 9 using namespace std;10 #define LL long long11 typedef pair<int,int> pii;12 const double inf = 123456789012345.0;13 const LL MOD =100000000LL;14 const int N =1e4+10;15 #define clc(a,b) memset(a,b,sizeof(a))16 const double eps = 1e-8;17 void fre() {freopen("in.txt","r",stdin);}18 void freout() {freopen("out.txt","w",stdout);}19 inline int read() {int x=0,f=1;char ch=getchar();while(ch>9||ch<0) {if(ch==-) f=-1; ch=getchar();}while(ch>=0&&ch<=9) {x=x*10+ch-0;ch=getchar();}return x*f;}20 21 int sgn(double x){22     if(fabs(x) < eps)return 0;23     if(x < 0)return -1;24     else return 1;25 }26 struct Point{27     double x,y;28     Point(){}29     Point(double _x,double _y){30         x = _x;y = _y;31     }32     Point operator -(const Point &b)const{33         return Point(x - b.x,y - b.y);34     }35     double operator ^(const Point &b)const{36         return x*b.y - y*b.x;37     }38     double operator *(const Point &b)const{39         return x*b.x + y*b.y;40     }41 };42 43 struct Line{44     Point s,e;45     Line(){}46     Line(Point _s,Point _e){47         s=_s;e=_e;48     }49     pair<int,Point> operator & (const Line &b) const{50         Point res=s;51         if(sgn((s-e)^(b.s-b.e))==0){52             if(sgn((s-b.e)^(b.s-b.e))==0) 53                 return make_pair(0,res);54             else  return make_pair(1,res);55         }56         double t=((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));57         res.x+=(e.x-s.x)*t;58         res.y+=(e.y-s.y)*t;59         return make_pair(2,res);60     }61 };62 63 int main(){64     int T;65     scanf("%d",&T);66     double x1,x2,x3,x4,y1,y2,y3,y4;67     printf("INTERSECTING LINES OUTPUT\n");68     while(T--){69         scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);70         Line line1 = Line(Point(x1,y1),Point(x2,y2));71         Line line2 = Line(Point(x3,y3),Point(x4,y4));72         pair<int,Point> ans=line1 & line2;73         if(ans.first==0) printf("LINE\n");74         else if(ans.first==1) printf("NONE\n");75         else printf("POINT %.2f %.2f\n",ans.second.x,ans.second.y);76     }77     printf("END OF OUTPUT\n");78     return 0;79 }

 

直线相交 POJ 1269