计算几何的又一个基础题,直接用黑书的模版即可。问题是要求出对于给定的两条的直线中的两点,得出两条直线的关系:平行、共线和相交,相交时求出交点。
以下是代码:
#include<cstdio>#include<iostream>using namespace std;struct point{ double x,y;}p1,p2,p3,p4,p0;double a1,b1,c1,a2,b2,c2;void solve(){ p0.x=(c1*b2-c2*b1)/(a2*b1-a1*b2); p0.y=(a2*c1-a1*c2)/(a1*b2-a2*b1);}double crossmul(point p1,point p2,point p3) //叉乘{ return (p3.x-p1.x)*(p2.y-p1.y)-(p2.x-p1.x)*(p3.y-p1.y);}double pointmul(point p1,point p2,point p3,point p4) //点乘 { return (p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x);}int main(){ int T; scanf("%d",&T); printf("INTERSECTING LINES OUTPUT/n"); while(T--) { int i; 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);if(crossmul(p3,p4,p1)==0 && crossmul(p3,p4,p2)==0) printf("LINE/n"); //判断两条直线是否共线 else { if(pointmul(p1,p2,p3,p4)==0) //判断两条直线是否平行 printf("NONE/n"); else { a1=p1.y-p2.y; b1=p2.x-p1.x; c1=p1.x*p2.y-p2.x*p1.y; a2=p3.y-p4.y; b2=p4.x-p3.x; c2=p3.x*p4.y-p4.x*p3.y; solve(); printf("POINT %.2lf %.2lf/n",p0.x,p0.y); //求出两条直线的交点 } } } printf("END OF OUTPUT/n"); return 0;}