poj 1269 Intersecting Lines

题目来源:POJ 1269

简单题目分析:
求两条直线的位置关系(相交、平行、重合),若相交则求出交点坐标。
思路:计算几何入门,我的代码不具有任何参考价值!(因为用的是最简单的办法,高中那一套理论)

#include <iostream>
#include <stdio.h>

using namespace std;

struct point
{
    double x,y;
}pp[5];

struct line
{
    double k,b;
}ll[3];

bool isK[3];

void getK()
{
    if(pp[1].x!=pp[2].x)
    {
        ll[1].k=(pp[1].y-pp[2].y)/(pp[1].x-pp[2].x);
        isK[1]=true;
    }
    else
        isK[1]=false;
    if(pp[3].x!=pp[4].x)
    {
        ll[2].k=(pp[3].y-pp[4].y)/(pp[3].x-pp[4].x);
        isK[2]=true;
    }
    else
        isK[2]=false;
}

void getB()
{
    if(isK[1]&&isK[2])
    {
        ll[1].b=pp[1].y-ll[1].k*pp[1].x;
        ll[2].b=pp[3].y-ll[2].k*pp[3].x;
    }
}

int main()
{
    int T;
    scanf("%d",&T);
    printf("INTERSECTING LINES OUTPUT\n");
    while(T--)
    {
        for(int i=1;i<=4;++i)
            scanf("%lf %lf",&pp[i].x,&pp[i].y);
        getK();getB();
        if(!isK[1]&&!isK[2])
        {
            if(pp[1].x==pp[3].x)
            {
                printf("LINE\n");
                continue;
            }
            else
            {
                printf("NONE\n");
                continue;
            }
        }
        if(isK[1]&&!isK[2])
        {
            printf("POINT %.2lf %.2lf\n",pp[3].x,pp[1].y+ll[1].k*(pp[3].x-pp[1].x));
            continue;
        }
        if(!isK[1]&&isK[2])
        {
            printf("POINT %.2lf %.2lf\n",pp[1].x,pp[3].y+ll[2].k*(pp[1].x-pp[3].x));
            continue;
        }
        if(isK[1]&&isK[2])
        {
            if(ll[1].k==ll[2].k)
            {
                if(ll[1].b==ll[2].b)
                {
                    printf("LINE\n");
                    continue;
                }
                else
                {
                    printf("NONE\n");
                    continue;
                }
            }
            else
            {
                double px=(ll[1].b-ll[2].b)/(ll[2].k-ll[1].k);
                double py=ll[1].k*px+ll[1].b;
                printf("POINT %.2lf %.2lf\n",px,py);
                continue;
            }
        }
    }
    printf("END OF OUTPUT\n");
    return 0;
}

这两天心情浮躁,愈发感觉自己会的东西太少太少,眼界太低太低。
见识过太多的大佬,有搞acm的,也有高中学OI的,原来,自己和他们的差距,远不止自己所想象的那么近。
共勉,共勉!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值