poj 1269

    技术2022-05-20  43

         计算几何的又一个基础题,直接用黑书的模版即可。问题是要求出对于给定的两条的直线中的两点,得出两条直线的关系:平行、共线和相交,相交时求出交点。

         

          以下是代码:

     

    #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;}

    最新回复(0)