zoukankan      html  css  js  c++  java
  • Intersecting Lines---poj1269(求两直线的位置关系)

    题目链接:http://poj.org/problem?id=1269

     题意:给你两条直线上的任意不同的两点,然后求两条直线的位置关系,如果相交于一点输出该点坐标;

    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<string.h>
    #include<stdio.h>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    #define met(a, b) memset(a, b, sizeof(a))
    #define mod 1000000007
    typedef long long LL;
    //////////////////////////////////////////////////////////////
    const int INF = 0x3f3f3f3f;
    const int N = 21;
    const double eps = 1e-8;
    
    int Sign(double x)
    {
        if(fabs(x) < eps) return 0;
        if(x<0) return -1;
        return 1;
    }
    
    struct point
    {
        double x, y;
        point(double x_=0, double y_=0):x(x_),y(y_){}
        point operator -(const point &b)const
        {
            return point(x-b.x, y-b.y);
        }
        double operator ^(const point &b)const
        {
            return (x*b.y - b.x*y);
        }
    };
    
    struct line
    {
        point p1, p2;
        line(){}
        line(point p1_, point p2_):p1(p1_), p2(p2_){}
    };
    ///找到直线L1与L2的交点p0,返回值不同,含义不同;
    int FindLinePoint(line L1, line L2, point &p0)
    {
        double k = ((L1.p1-L1.p2) ^ (L2.p1-L2.p2));
        if(Sign(k) == 0)
        {
            double t = ((L1.p1-L1.p2)^(L1.p1-L2.p1));
            if(Sign(t) == 0) return 2;///共线;
            return 1;///平行
        }
        p0 = L1.p1;
        double t = ((L1.p1-L2.p1)^(L2.p1-L2.p2))/((L1.p1-L1.p2)^(L2.p1-L2.p2));
        p0.x += (L1.p2.x - L1.p1.x)*t;
        p0.y += (L1.p2.y - L1.p1.y)*t;
        return 3;///相交于一点p0;
    }
    
    
    int main()
    {
        printf("INTERSECTING LINES OUTPUT
    ");
        int T;
        scanf("%d", &T);
        while(T--)
        {
            point p0;
            double x1, y1, x2, y2, x3, y3, x4, y4;
            scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &x1,&y1, &x2,&y2, &x3,&y3, &x4,&y4);
            line L1 = line(point(x1,y1), point(x2,y2));
            line L2 = line(point(x3,y3), point(x4,y4));
            int ans = FindLinePoint(L1, L2, p0);
            if(ans == 1) printf("NONE
    ");///平行;
            if(ans == 2) printf("LINE
    ");///共线;
            if(ans == 3) printf("POINT %.2f %.2f
    ", p0.x, p0.y);
        }
        printf("END OF OUTPUT
    ");
        return 0;
    }
    View Code
  • 相关阅读:
    【Git】分支管理
    【Java】jprofiler工具初上手
    【中间件】JMS
    【Idea】编译问题Intellij Error: Internal caches are corrupted or have outdated format
    【测试】测试用例选择
    【DevOps】
    【Unix】z/OS系统
    【数据库】表空间释放
    【数据库pojo类】Oracle数据库中各数据类型在Hibernate框架中的映射
    基于闭包实现的显示与隐藏
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5987248.html
Copyright © 2011-2022 走看看