zoukankan      html  css  js  c++  java
  • 线段相交

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264

    题目:

    给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交)。 如果相交,输出"Yes",否则输出"No"。
    Input
    第1行:一个数T,表示输入的测试数量(1 <= T <= 1000)
    第2 - T + 1行:每行8个数,x1,y1,x2,y2,x3,y3,x4,y4。(-10^8 <= xi, yi <= 10^8)
    (直线1的两个端点为x1,y1 | x2, y2,直线2的两个端点为x3,y3 | x4, y4)
    Output
    输出共T行,如果相交输出"Yes",否则输出"No"。
    Input示例
    2
    1 2 2 1 0 0 2 2
    -1 1 1 1 0 0 1 -1
    Output示例
    Yes
    No


    看的第一眼觉得和求两个直线是否存在交点差不多,但是好麻烦,而且应该过不了,毕竟线段和直线是有很大区别的;
    然后百度了一下,觉得这篇博客讲的很好!http://blog.csdn.net/yao1373446012/article/details/51469175
    所以这个题目就只要弄清楚关系别写错就能AC了!

    AC代码:
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    struct point
    {
        double x;
        double y;
    }P1,P2,Q1,Q2;
    int main()
    {
        double x1,y1,x2,y2,x3,y3,x4,y4;
        int t;
        cin>>t;
        while (t--)
        {
            cin>>P1.x>>P1.y>>P2.x>>P2.y>>Q1.x>>Q1.y>>Q2.x>>Q2.y;
            double sum1=(P1.x-Q1.x)*(Q2.y-Q1.y)-(P1.y-Q1.y)*(Q2.x-Q1.x);
            double sum2=(P2.x-Q1.x)*(Q2.y-Q1.y)-(P2.y-Q1.y)*(Q2.x-Q1.x);
            double sum3=(Q1.x-P1.x)*(P2.y-P1.y)-(Q1.y-P1.y)*(P2.x-P1.x);
            double sum4=(Q2.x-P1.x)*(P2.y-P1.y)-(Q2.y-P1.y)*(P2.x-P1.x);
            if (sum1*sum2<=0&&sum3*sum4<=0)
                cout << "Yes" << endl;
            else
                cout << "No" << endl;
        }
        return 0;
    }
  • 相关阅读:
    Bugly和dispatch_once Crash
    IQKeyboardManager
    Storyboard References
    Book
    Git管理
    iOS开发之RunLoop--转
    H264之PPS、SPS了解
    iOS之UI设置随记
    使用 github 本地项目上传到github上 步骤
    spring中自定义注解
  • 原文地址:https://www.cnblogs.com/lisijie/p/7652874.html
Copyright © 2011-2022 走看看