几何题。
题目大意:给你4个点,问你其确定的两条直线间的位置关系:平行,相交或是重合,如果相交,求出交点坐标。
因为数据只有上述三种情况,故我们可以先确定这两天直线是否平行或重合,如果不是,直接求出他们交点的坐标即可
代码如下:
#include <cstdio> #include <algorithm> using namespace std; typedef struct node { double x,y; }point; typedef struct line { point start,end; }segment; double multi(point p1,point p2,point p0) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } bool is_px(point p1,point p2,point p3,point p4) { if((p1.x-p2.x)*(p3.y-p4.y)==(p3.x-p4.x)*(p1.y-p2.y)) return true; return false; } point intersection(segment u,segment v) { point p; p.x=(multi(v.end,u.end,u.start)*v.start.x-multi(v.start,u.end,u.start)*v.end.x)/(multi(v.end,u.end,u.start)-multi(v.start,u.end,u.start)); p.y=(multi(v.end,u.end,u.start)*v.start.y-multi(v.start,u.end,u.start)*v.end.y)/(multi(v.end,u.end,u.start)-multi(v.start,u.end,u.start)); return p; } int main() { segment u,v; int t; int x1,x2,x3,x4; int y1,y2,y3,y4; scanf("%d",&t); printf("INTERSECTING LINES OUTPUT\n"); while(t--) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); scanf("%d%d%d%d",&x3,&y3,&x4,&y4); u.start.x=x1;u.start.y=y1; u.end.x=x2;u.end.y=y2; v.start.x=x3;v.start.y=y3; v.end.x=x4;v.end.y=y4; if(multi(u.start,u.end,v.start)==0&&multi(u.start,u.end,v.end)==0) puts("LINE"); else if(is_px(u.start,u.end,v.start,v.end)) puts("NONE"); else { point p=intersection(u,v); printf("POINT %.2lf %.2lf\n",p.x,p.y); } } printf("END OF OUTPUT\n"); return 0; }