线线几何位置关系

来源:互联网 发布:显示登录成功和链接php 编辑:程序博客网 时间:2024/05/17 02:51

UVA 378

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=11&page=show_problem&problem=314

点击打开链接

我想,我这应该是最最原始的解题代码了,哈哈哈~

原先写了很用到向量叉积几何意义来求解的代码可是结果一直出错。。。果断最原始。


#include <cstdio>struct point{//点结构体    int  x,y;    point(int a=0,int b=0){        x=a; y=b;}//给点赋坐标值};point p1,p2,p3,p4;inline void outResult(){//判断两条线段是否相交    double k1,k2,b1,b2;   if( (p2.x==p1.x) || (p3.x==p4.x)){//直线p1p2或p3p4平行y轴无斜率       if( (p2.x==p1.x) && (p3.x==p4.x)){//都没斜率         if(p1.x==p3.x)            printf("LINE\n");         else printf("NONE\n");       }       else if( (p2.x==p1.x) && (p3.x!=p4.x)){//p3p4有,p1p2无斜率            k2 = (p4.y-p3.y)/(p4.x-p3.x);            b2 = (p3.y - k2*p3.x);            printf("POINT %.2lf %.2lf\n", p1.x, k2*p1.x + b2);       }       else{//p1p2有,p3p4无斜率            k1 = ((p2.y-p1.y)/(p2.x-p1.x));            b1 = (p1.y - k1*p1.x);            printf("POINT %.2lf %.2lf\n", p3.x, k1*p3.x + b1);       }    }    else{//都存在斜率时        k1 = (double)(p2.y-p1.y)/(p2.x-p1.x);        k2 = (double)(p4.y-p3.y)/(p4.x-p3.x);        b1 = (double)(p1.y - k1*p1.x);        b2 = (double)(p3.y - k2*p3.x);       // printf("%lf %lf %lf %lf\n",k1,k2,b1,b2);        if( k1==k2 ){            if( b1==b2 ) printf("LINE\n");            else printf("NONE\n");//只是平行不同线        }        else            printf("POINT %.2lf %.2lf\n",(b1-b2)/(k2-k1),k1*(b1-b2)/(k2-k1) + b1);    }}inline void init(){        int x1,y1,x2,y2,x3,y3,x4,y4;        scanf("%d%d %d%d %d%d %d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);        p1 = point(x1,y1);  p3 = point(x3,y3);        p2 = point(x2,y2);  p4 = point(x4,y4);}int main(){    int n;    scanf("%d",&n);    printf("INTERSECTING LINES OUTPUT\n");    while(n--){           init();           outResult();    }    printf("END OF OUTPUT\n");    return 0;}


待更,持续更新中……

0 0