poj 1269 Intersecting Lines

呵呵呵,求一下平行,共线和相交。。。。。。。。。高(初)中数学知识。。。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #define N 1000005
 5 #define LL long long
 6 #define inf 0x3f3f3f3f
 7 #define eps 1e-8
 8 using namespace std;
 9 int n;
10 struct point{double x,y;};
11 struct line{point a,b;}s1,s2;
12 struct node{
13     double a,b,c,d;
14 }a,b;
15 point sub(point a, point b)
16 {
17     point t; t.x=a.x-b.x; t.y=a.y-b.y;
18     return t;
19 }
20 double cross(point a, point b)
21 {
22     return a.x*b.y-a.y*b.x;
23 }
24 /*double turn(point p1, point p2, point p3)
25 {
26     return cross(sub(p2,p1),sub(p3,p1));
27 }*/
28 /*bool sgn(point a, point b)
29 {
30     if (fabs(a.x-b.x)<eps && fabs(a.y-b.y)<eps) return 0;
31     return 1;
32 }
33 bool same_line(line a, line b)
34 {
35     if (!sgn(a.a,b.a) || !sgn(a.b,b.a) || !sgn(a.a,b.b) || !sgn(a.a,b.b)) return 0;
36     if (fabs(turn(a.a,a.b,b.a)*turn(a.a,a.b,b.b))>eps) return 0;
37     if (fabs(turn(b.a,b.b,a.a)*turn(b.a,b.b,a.b))>eps) return 0;
38     return 1;
39 }*/
40 bool same_line()
41 {
42     return (fabs((a.a-a.c)*(b.b-b.d)-(a.b-a.d)*(b.a-b.c))<eps);
43 }
44 bool par()
45 {
46     /*if (fabs(cross(sub(a.a,a.b),sub(b.a,b.b)))<eps) return 1;
47     return 0;*/
48     return (fabs((a.c-a.a)*(b.b-a.b)-(a.d-a.b)*(b.a-a.a))<eps);
49 }
50 point cross_point(line a, line b)
51 {
52     double k1,k2,t;
53     k1=cross(sub(a.b,b.a),sub(b.b,b.a));
54     k2=cross(sub(b.b,b.a),sub(a.a,b.a));
55     t=k1/(k1+k2);
56     point ans;
57     ans.x=a.b.x+(a.a.x-a.b.x)*t;
58     ans.y=a.b.y+(a.a.y-a.b.y)*t;
59     return ans;
60 }
61 int main()
62 {
63     puts("INTERSECTING LINES OUTPUT");
64     scanf("%d",&n);
65     while (n--)
66     {
67         scanf("%lf%lf%lf%lf",&s1.a.x,&s1.a.y,&s1.b.x,&s1.b.y);
68         scanf("%lf%lf%lf%lf",&s2.a.x,&s2.a.y,&s2.b.x,&s2.b.y);
69         a.a=s1.a.x,a.b=s1.a.y,a.c=s1.b.x,a.d=s1.b.y;
70         b.a=s2.a.x,b.b=s2.a.y,b.c=s2.b.x,b.d=s2.b.y;
71         if (same_line()) 
72         {
73             if (par())     puts("LINE");
74                 else puts("NONE");
75         }
76         else  
77         {  
78             point ans=cross_point(s1,s2);
79             printf("POINT %.2f %.2f
",ans.x,ans.y);
80         }  
81     }
82     puts("END OF OUTPUT");
83     return 0;
84 }
原文地址:https://www.cnblogs.com/ccd2333/p/6480826.html