呵呵呵,求一下平行,共线和相交。。。。。。。。。高(初)中数学知识。。。
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 }