POJ 1269 Intersecting Lines 判断两直线关系
用的是初中学的方法
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define eps 1e-8 using namespace std; struct Point { double x,y; Point() {}; Point(double xx,double yy) { x=xx; y=yy; } }ans; int getCross(Point p1,Point p2,Point q1,Point q2) { double k1=(p1.y-p2.y)/(p1.x-p2.x); double k2=(q1.y-q2.y)/(q1.x-q2.x); double b1=p1.y-k1*p1.x; double b2=q1.y-k2*q1.x; if(p1.x==p2.x && q1.x==q2.x) return p1.x==q1.x? 1:-1; if(p1.x==p2.x) { ans=Point(p1.x,k2*p1.x+b2); return 0; } if(q1.x==q2.x) { ans=Point(q1.x,k1*q1.x+b1); return 0; } if(fabs(k1-k2)<eps) return fabs(b1-b2)<eps? 1:-1; ans.x=(b2-b1)/(k1-k2); ans.y=k1*ans.x+b1; return 0; } int main() { // freopen("in.txt","r",stdin); int t; scanf("%d",&t); Point pot[4]; puts("INTERSECTING LINES OUTPUT"); while(t--) { double x,y; for(int i=0; i<4; i++) { scanf("%lf%lf",&x,&y); pot[i]=Point(x,y); } int tmp=getCross(pot[0],pot[1],pot[2],pot[3]); if(tmp==-1) puts("NONE"); else if(tmp==1) puts("LINE"); else printf("POINT %.2f %.2f\n",ans.x,ans.y); } puts("END OF OUTPUT"); return 0; }