POJ 1269 intersecting Lines

蒻苣:弱弱很弱,路过的巨巨还不吝赐教!^.^...QAQ

题意:给定两条线段,判断是共线还是平行还是相交,相交还要输出相交的点

题解:转化成直线方程,然后直接判断就行。注意精度误差

代码:

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cstdio>
 6 using namespace std;
 7 const double EP = 1E-9;
 8 struct POINT{
 9         double x,y;
10         POINT ( double a = 0, double b = 0 ){ x = a; y = b ;}
11 };
12 
13 struct LINE{
14         double a,b,c;
15         LINE( double d1 = 1,double d2 = -1,double d3 = 0 ){ a = d1;b = d2; c = d3; }
16 };
17 
18 LINE makeline( POINT p1, POINT p2 )
19 {
20         LINE tl;
21         int sign = 1;
22         tl.a = p2.y - p1.y;
23         if(tl.a<0)
24         {
25                 sign = -1;
26                 tl.a = sign*tl.a;
27         }
28         tl.b = sign*( p1.x - p2.x );
29         tl.c = sign*( p1.y*p2.x - p1.x*p2.y );
30         return tl;
31 }
32 
33 bool lineintersect( LINE l1, LINE l2, POINT &p )
34 {
35         double d = l1.a*l2.b - l2.a*l1.b;
36         if(abs(d)<EP)
37                 return false;
38         p.x = ( l2.c*l1.b-l1.c*l2.b )/d;
39         p.y = ( l2.a*l1.c-l1.a*l2.c )/d;
40         return true;
41 }
42 
43 int main()
44 {
45         int n;
46         cin>>n;
47         puts("INTERSECTING LINES OUTPUT");
48         POINT a,b,c,d;
49         for(int i = 0;i < n;i++)
50         {
51                 POINT p;
52                 cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y>>d.x>>d.y;
53                 LINE l1 = makeline(a,b);
54                 LINE l2 = makeline(c,d);
55              //   cout<<l1.a<<" "<<l1.b<<" "<<l1.c<<endl;
56               //  cout<<l2.a<<" "<<l2.b<<" "<<l2.c<<endl;
57                 if( abs(l1.a*l2.b - l1.b*l2.a) < EP && abs(l1.a*l2.c - l1.c*l2.a) < EP && abs(l1.b*l2.c - l1.c*l2.b) < EP )
58                         puts("LINE");
59                 else if(lineintersect(l1,l2,p))
60                 {
61                         //cout<<p.x<<" "<<p.y<<endl;
62                         printf("POINT %.2f %.2f\n",p.x,p.y);
63                 }
64                 else
65                         puts("NONE");
66         }
67         puts("END OF OUTPUT");
68 }
View Code

 

posted on 2015-08-21 23:04  小松song  阅读(82)  评论(0)    收藏  举报

导航