Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std ;
- #define M 100
- #define pf printf
- #define sf scanf
- #define sf1(x) scanf("%d",&x)
- #define sf2(x,y) scanf("%d %d",&x,&y)
- #define pf1(x) printf("%d\n",x)
- #define pf2(x,y) printf("%d %d\n",x,y)
- #define rep(i,n) for(i = 0 ;i< n ; i++)
- #define pb push_back
- struct kkk {
- double a, b, c , m , x1 , y1 , x2 ,y2;
- }data[5];
- void call(double x1, double y1 , double x2 , double y2 , int tag){
- data[tag].x1 = x1;
- data[tag].x2 = x2;
- data[tag].y1 = y1;
- data[tag].y2 = y2;
- if(y1 == y2){
- data[tag].a = 0;
- data[tag].b = 1;
- data[tag].c = -y1;
- data[tag].m = 0;
- return ;
- }
- else if(x1 == x2 ){
- data[tag].a = 1;
- data[tag].b = 0;
- data[tag].c = -x1;
- data[tag].m = 0;
- return ;
- }
- else {
- double ret ;
- ret =(double) (y2 - y1)/(x2 - x1);
- data[tag].a = ret ;
- data[tag].b = -1;
- data[tag].c = -ret*x1 +y1;
- data[tag].m = ret ;
- return ;
- }
- }
- ///-1 if paralll
- ///0 ifi intersecting line
- ///else if line ,,
- int parall(void){
- if(data[1].m == data[2].m){
- if(data[1].a != data[2].a ||
- data[1].b != data[2].b)
- return 0;
- if(data[1].c == data[2].c &&
- data[1].a == data[2].a &&
- data[1].b == data[2].b ){
- return 1;
- }
- else
- return -1;
- }
- else
- return 0 ;
- }
- double p_1 , p_2 ;
- int i_sec(void){
- double ret , ret1, ret2 , x1 ,y1 ,x2 ,y2;
- double px1, px2 , py1 ,py2;
- x1 = data[1].x1;
- y1 = data[1].y1;
- x2 = data[1].x2;
- y2 = data[1].y2;
- px1 = data[2].x1;
- py1 = data[2].y1;
- px2 = data[2].x2;
- py2 = data[2].y2;
- double a1, b1 ,c1 , a2 ,b2 ,c2 ;
- a1 = data[1].a ;
- b1 = data[1].b ;
- c1 = data[1].c ;
- a2 = data[2].a ;
- b2 = data[2].b ;
- c2 = data[2].c ;
- double hold ,k1 ,k2;
- hold = a1*b2 - a2*b1 ;
- k1 = (double) (b1*c2 - b2*c1)/hold ;
- k2 = (double)(c1*a2 - c2*a1)/hold ;
- /*
- pf("from insec ....%lf %lf %lf\n", k1, k2 , hold);
- ////
- ret = sqrt( (x1- x2)*(x1- x2) + (y1-y2)*(y1-y2) );
- ret1 = sqrt( (x1- k1)*(x1- k1) + (y1- k2)*(y1- k2) );
- ret2 = sqrt( (x2- k1)*(x2- k1) + (y2- k2)*(y2- k2) );
- int flag = 0;
- if(ret1 + ret2 - ret <= .000001 && ret - ret1 -ret2 <= .0000001)
- flag =1;
- */
- //if(flag ==1 ){
- p_1 = k1 ;
- p_2 = k2 ;
- return 1;
- //}
- }
- int main(){
- //freopen("in.txt","r",stdin);
- //freopen("out.txt","w",stdout);
- int i, j , k ,tc;
- sf1(tc);
- pf("INTERSECTING LINES OUTPUT\n");
- while(tc--){
- double x1 ,x2, y1, y2 , px1 , px2 , py1,py2 ;
- scanf("%lf%lf %lf%lf %lf%lf %lf%lf",&x1,&y1 ,&x2, &y2 , &px1,&py1,&px2,&py2 );
- call(x1, y1,x2 ,y2, 1 );
- call(px1 , py1 , px2 , py2 , 2);
- ///*
- k = parall();
- if(k == -1) {
- pf("NONE\n");
- continue ;
- }
- else if(k == 1){
- pf("LINE\n");
- continue ;
- }
- //*/
- k = i_sec();
- if(k == -1) pf("NONE\n");
- else{
- pf("POINT %.2lf %.2lf\n",p_1 , p_2);
- }
- }
- pf("END OF OUTPUT\n");
- return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement