| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 16792 | Accepted: 7233 |
Description
Your program will repeatedly read in four points that define two lines in the x-y plane and determine how and where the lines intersect. All numbers required by this problem will be reasonable, say between -1000 and 1000.
Input
Output
Sample Input
5 0 0 4 4 0 4 4 0 5 0 7 6 1 0 2 3 5 0 7 6 3 -6 4 -3 2 0 2 27 1 5 18 5 0 3 4 0 1 2 2 5
Sample Output
INTERSECTING LINES OUTPUT POINT 2.00 2.00 NONE LINE POINT 2.00 5.00 POINT 1.07 2.20 END OF OUTPUT
分析:这个提示真的坑,代码注释自己看吧。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int main()
{
int n;
double x1,x2,x3,x4,y1,y2,y3,y4;
scanf("%d",&n);
printf("INTERSECTING LINES OUTPUT\n");
while(n--)
{
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
if((x4-x3)*(y2-y1)==(y4-y3)*(x2-x1)) //斜率判断
{
if((x2-x1)*(y3-y1)==(y2-y1)*(x3-x1))// 叉乘判断是否重合 (取一条线上俩点加另外一条直线上一个点)
printf("LINE\n");
else
printf("NONE\n");
}
else
{
double A1=y2-y1; double B1=x1-x2; double C1=x2*y1-x1*y2;
double A2=y4-y3; double B2=x3-x4; double C2=x4*y3-x3*y4;
double x0=((C1*B2)-(C2*B1))/((A2*B1)-(A1*B2));
double y0=(A2*x0+C2)/(-B2);
//y0=((A1*C2)-(A2*C1))/((A2*B1)-(A1*B2));
printf("POINT %.2lf %.2lf\n",x0,y0); //注意double类型,在g++中会出错,提交用c++;
}
}
printf("END OF OUTPUT\n");
return 0;
}
1392



被折叠的 条评论
为什么被折叠?



