/* * POJ_1269.cpp * * Created on: 2013年11月16日 * Author: Administrator */ #include <iostream> #include <cstdio> #include <cmath> using namespace std; const double epsi = 1e-10; const double pi = acos(-1.0); const int maxn = 100005;//这个不要开得太小... struct Point{ double x,y; Point(double _x = 0,double _y = 0):x(_x),y(_y){ } Point operator-(const Point& op2)const{//**要注意这种写法 return Point(x - op2.x,y - op2.y); } double operator^(const Point& op2)const{ return x*op2.y - y*op2.x; } }; int sign(const double& x){//判断x是正数还是负数 if(x > epsi){ return 1;//传入的数是一个整数... }else if(x < -epsi){ return -1;//传入的数是一个负数... } return 0; } double sqr(double x){//计算一个数的平方数 return x*x; } double mul(const Point& p0,const Point& p1,const Point& p2){//计算p0p1与p1p2的叉积叉积 return (p1-p0)^(p2-p0); } double dis2(const Point& p0,const Point& p1){//返回两个点的距离的平方 return sqr(p0.x - p1.x) + sqr(p0.y - p1.y); } double dis(const Point& p0,const Point& p1){//返回两个点的距离 return sqrt(dis2(p0,p1)); } int cross(const Point& p1,const Point& p2,const Point& p3,const Point& p4,Point& p){//判断p1p2是否跨立p3p4 double a1 = mul(p1,p2,p3); double a2 = mul(p1,p2,p4); if(sign(a1) == 0 && sign(a2) == 0){//如果这两根木棒重合 return 2; } if(sign(a1 - a2) == 0){//平行..这是要注意的... return 0; } /** * 求交点的核心代码 */ p.x = (a2*p3.x - a1*p4.x)/(a2-a1); p.y = (a2*p3.y - a1*p4.y)/(a2-a1); return 1;//p1p2和p3p4通过跨立实验 } Point p1,p2,p3,p4,p; int main(){ int t; scanf("%d",&t); printf("INTERSECTING LINES OUTPUT\n"); while(t--){ scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y,&p4.x,&p4.y); int m = cross(p1,p2,p3,p4,p); if(m == 0){ printf("NONE\n"); }else if(m == 2){ printf("LINE\n"); }else{ printf("POINT %.2lf %.2lf\n",p.x,p.y); } } printf("END OF OUTPUT\n"); return 0; }