Intersecting Lines (计算几何)

题意:给你四个点叫组成两条直线判断这两条直线的关系

模板:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
using namespace std;
struct point
{
    int x,y;
};
int gcd(int a,int b)
{
    if(b==0) return a;
    return gcd(b,a%b);
}
void line_relationship(point A,point B,point C ,point D)
{

    int a=B.y-A.y,b=A.x-B.x,c=B.x*A.y-A.x*B.y; //求第一条直线的a,b,c
    int cc=gcd(gcd(a,b),c); a/=cc;b/=cc;c/=cc;
    int a1=D.y-C.y,b1=C.x-D.x,c1=D.x*C.y-C.x*D.y;//第二条
    int zz=gcd(gcd(a1,b1),c1);  a1/=zz; b1/=zz; c1/=zz;
    if(a==a1&&b==b1&&c==c1) printf ("LINE\n");//判断是否是一条直线
    else if(a==a1&&b==b1&&c!=c1) printf ("NONE\n");//是否是平行
    else //相交
    {
        double x,y;
        if(a==0) y= double(-c)/double(b),x= -1.0*(double(b1)*y+double(c1))/double(a1);
        else if(a1==0) y=double(-c1)/double(b1),x= -1.0*(double(b)*y+double(c))/double(a);
        else y= double(a1*c-a*c1)/double (a*b1-a1*b),x= -1.0*(double(b)*y+double(c))/double(a);
        printf ("POINT %.2lf %.2lf\n",x,y);
    }
}
int main()
{
    int n;
    scanf ("%d",&n);
    printf ("INTERSECTING LINES OUTPUT\n");
    for (int i=0;i<n;i++)
    {
        point A,B,C,D;
        scanf ("%d%d%d%d%d%d%d%d",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y,&D.x,&D.y);
        line_relationship(A,B,C,D);
    }
    printf ("END OF OUTPUT\n");
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值