poj 1269 Intersecting Lines 计算几何 直线求交点

题目链接

自己请教了队长和军哥,终于明白了 模版的思想了。

模版还需要自己再写一遍的。

还有要注意的是 对于g++ 编译器来讲 输出要用%f   而对c++编译器来讲,要用 %lf 这是要注意的。

#include<stdio.h>
#include<cmath>
#include<iostream>
#include<stdlib.h>
using namespace std;

struct point{
       double x,y; 
       point(double a,double b):x(a),y(b){}  //如果声明了这样的函数 就要重写下面的无参的构造函数 
       point(){};                              // 无参的构造函数 
       friend point operator - (const point &a,const point &b){   //点的减法
             return   point(a.x-b.x,a.y-b.y);     
       }
       friend point operator * (const double &a,const point &b){   //数乘以点
              return point(a*b.x,a*b.y);       
       }
       friend point operator / (const point &a ,const double b){  //点除以数
              return point(a.x/b,a.y/b);       
       }
};
struct line{
       point a,b;
} ;


const double eps=1e-8;
int cmp(double x){               //判断是否趋近于0
   if(fabs(x)<eps)return 0;
   if(x>eps)return 1;
   else return -1;
}
double det(point a,point b){            //叉乘  向量积
      return a.x*b.y-a.y*b.x;   
}
bool parallel(point a,point b){   //判断平行的函数
    if( cmp(det(a,b))==0 ) return true;
    else return false;
}
point Line_make_point(line one,line two){    //判断相交的函数
      double s1=det(one.a-two.a , two.b-two.a);
      double s2=det(one.b-two.a , two.b-two.a);
      return (s1*one.b-s2*one.a)/(s1-s2);      
}


int main()
{
    line one,two;
    int n;
    scanf("%d",&n);
    printf("INTERSECTING LINES OUTPUT\n");
    while(n--){
         scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&one.a.x,&one.a.y,&one.b.x,&one.b.y,&two.a.x,&two.a.y,&two.b.x,&two.b.y);
         if ( (parallel(one.a-one.b,two.a-two.b)==true) && ((parallel(one.a-two.b,two.a-one.b)==true)) ) {
             printf("LINE\n"); 
             continue;
         }
         if ( parallel(one.a-one.b,two.a-two.b)==true ){
            printf("NONE\n");
            continue;    
         }
         point ans=Line_make_point(one,two);        
         printf("POINT %.2f %.2f\n",cmp(ans.x)==0?0:ans.x , cmp(ans.y)==0?0:ans.y );      
    }    
    printf("END OF OUTPUT\n");
    //system("pause");

    return 0;
}





你可能感兴趣的:(算法)