Intersecting Lines POJ - 1269

Intersecting Lines

题目链接:https://vjudge.net/problem/POJ-1269

题目:

 题意:判断给出的两条线是否相等平行还是相交,若相交求出交点坐标。。水题坑点就是提交G++WA,而提交C++A了,,

 1 // 
 2 // Created by HJYL on 2020/1/13.
 3 //
 5 #include<iostream>
 6 #include<cstring>
 7 #include<cstdio>
 8 #include<cmath>
 9 #define eps 1e-6
10 using namespace std;
11 struct Point
12 {
13     double x,y;
14 };
15 struct Line
16 {
17     double a,b,c,angle;
18     Point p1,p2;
19     Line(Point s,Point e)
20     {
21         a=s.y-e.y;
22         b=e.x-s.x;
23         c=s.x*e.y-e.x*s.y;
24         angle=atan2(e.y-s.y,e.x-s.x);
25         p1=s;p2=e;
26     }
27     Line(){}
28 };
29 Point sub(Point a,Point b)
30 {
31     Point t;
32     t.x=a.x-b.x;
33     t.y=a.y-b.y;
34     return t;
35 }
36 double Cross(Point a,Point b)
37 {
38     return a.x*b.y-b.x*a.y;
39 }
40 
41 double turn(Point p1,Point p2,Point p3)
42 {
43     return Cross(sub(p2,p1),sub(p3,p1));
44 }
45 
46 bool IsEqual(Line a,Line b)
47 {
48     if(fabs(turn(a.p1,a.p2,b.p1)*turn(a.p1,a.p2,b.p2))>eps)return 0;
49     if(fabs(turn(b.p1,b.p2,a.p1)*turn(b.p1,b.p2,a.p2))>eps)return 0;
50     return 1;
51 }
52 bool IsParallel(Line a,Line b)
53 {
54     if(fabs(Cross(sub(a.p1,a.p2),sub(b.p1,b.p2)))<eps)return 1;
55     return 0;
56 }
57 Point Intersection(Line a,Line b)
58 {
59     double k1,k2,t;
60     k1=Cross(sub(a.p2,b.p1),sub(b.p2,b.p1));
61     k2=Cross(sub(b.p2,b.p1),sub(a.p1,b.p1));
62     t=k1/(k1+k2);
63     Point ans;
64     ans.x=a.p2.x+(a.p1.x-a.p2.x)*t;
65     ans.y=a.p2.y+(a.p1.y-a.p2.y)*t;
66     return ans;
67 }
68 int main()
69 {
70     //freopen("text","r",stdin);
71     int T;
72     scanf("%d",&T);
73     printf("INTERSECTING LINES OUTPUT\n");
74     Line s1,s2;
75     while(T--)
76     {
77         scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&s1.p1.x,&s1.p1.y,&s1.p2.x,&s1.p2.y,&s2.p1.x,&s2.p1.y,&s2.p2.x,&s2.p2.y);
78         if(IsEqual(s1,s2))
79             printf("LINE\n");
80         else if(IsParallel(s1,s2))
81             printf("NONE\n");
82         else
83         {
84             Point cc=Intersection(s1,s2);
85             printf("POINT %.2lf %.2lf\n",cc.x,cc.y);
86         }
87     }
88     printf("END OF OUTPUT\n");
89     return 0;
90 
91 }
 

猜你喜欢

转载自www.cnblogs.com/Vampire6/p/12185478.html