POJ 1269 求两直线交点

来源:互联网 发布:淘宝达人文章代写 编辑:程序博客网 时间:2024/05/16 18:35

题意:给出4个点,两个一组在两条直线上,求出这两条直线的重合部分,NONE就是平行,LINE就是重合,POINT就是有交点并且输出交点。

解析几何那么求,没什么好说的直接看代码吧。

#include <iostream>#include<cstdio>#include<algorithm>using namespace std;typedef double PointType;struct point{    PointType x,y;};point jd;int Jiaodian(point a,point b,point c,point d)//平行返回0 重合返回1 相交返回2{    double A1=b.y-a.y,A2=d.y-c.y,B1=a.x-b.x,B2=c.x-d.x;    double C1=b.y*(b.x-a.x)-b.x*(b.y-a.y),C2=d.y*(d.x-c.x)-d.x*(d.y-c.y);    if(A1*B2==B1*A2)//平行或重合    {        if(A2*C1==A1*C2&&B1*C2==B2*C1)            return 1;        return 0;    }    jd.x=(B1*C2-B2*C1)/(B2*A1-B1*A2);    jd.y=(A1*C2-A2*C1)/(A2*B1-A1*B2);    return 2;}int main(){    point a,b,c,d;    int n;    puts("INTERSECTING LINES OUTPUT");    scanf("%d",&n);    while(n--)    {        scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);        int ans=Jiaodian(a,b,c,d);        if(ans==0)            puts("NONE");        else if(ans==1)            puts("LINE");        else            printf("POINT %.2f %.2f\n",jd.x,jd.y);    }    puts("END OF OUTPUT");    return 0;}


原创粉丝点击