题意:给你四个点叫组成两条直线判断这两条直线的关系
模板:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
using namespace std;
struct point
{
int x,y;
};
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
void line_relationship(point A,point B,point C ,point D)
{
int a=B.y-A.y,b=A.x-B.x,c=B.x*A.y-A.x*B.y; //求第一条直线的a,b,c
int cc=gcd(gcd(a,b),c); a/=cc;b/=cc;c/=cc;
int a1=D.y-C.y,b1=C.x-D.x,c1=D.x*C.y-C.x*D.y;//第二条
int zz=gcd(gcd(a1,b1),c1); a1/=zz; b1/=zz; c1/=zz;
if(a==a1&&b==b1&&c==c1) printf ("LINE\n");//判断是否是一条直线
else if(a==a1&&b==b1&&c!=c1) printf ("NONE\n");//是否是平行
else //相交
{
double x,y;
if(a==0) y= double(-c)/double(b),x= -1.0*(double(b1)*y+double(c1))/double(a1);
else if(a1==0) y=double(-c1)/double(b1),x= -1.0*(double(b)*y+double(c))/double(a);
else y= double(a1*c-a*c1)/double (a*b1-a1*b),x= -1.0*(double(b)*y+double(c))/double(a);
printf ("POINT %.2lf %.2lf\n",x,y);
}
}
int main()
{
int n;
scanf ("%d",&n);
printf ("INTERSECTING LINES OUTPUT\n");
for (int i=0;i<n;i++)
{
point A,B,C,D;
scanf ("%d%d%d%d%d%d%d%d",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y,&D.x,&D.y);
line_relationship(A,B,C,D);
}
printf ("END OF OUTPUT\n");
return 0;
}