• 今天写了一个很简单的判断平面坐标系两线段是否相交的算法


    /// <summary>
    /// (x1,y1) and (x2,y2) stand for beeline segment 1;
    /// (x3,y3) and (x4,y4) stand for beeline segment 2.
    /// This method will help us to check whether the two line segments will cross with each other.
    /// </summary>
    /// <returns></returns>
    static bool IsCorssLine(double x1, double y1, double x2, double y2,
                            
    double x3, double y3, double x4, double y4)
    {
        
    //we assume the beeline as 
        
    //1: y = ax + b  (y1=ax1+b, y2=ax2+b)
        
    //2: y = mx + n  (y3=mx3+n, y4=mx4+n)
        double a, b, m, n;

        a 
    = (y1 - y2) / (x1 - x2);
        b 
    = y1 - a * x1;
        m 
    = (y3 - y4) / (x3 - x4);
        n 
    = y3 - m * x3;

        
    if (a == m) //means the two beelines are parallel
        {
            
    return false;
        }

        
    //now, let's get the corss point of the two lines
        double X, Y;
        X 
    = (n - b) / (a - m);
        Y 
    = a * X + b;

        
    //now, let's check whether (X,Y) is between (x1,y1) and (x2,y2), and between (x3,y3) and (x4,y4)
        bool xBetweenLine1 = false;
        
    bool yBetweenLine1 = false;
        
    bool xBetweenLine2 = false;
        
    bool yBetweenLine2 = false;
        
    if( ((X >= x1)&&(x2 >= X)) || ((X <= x1)&&(x2 <= X)) )
        {
            xBetweenLine1 
    = true;
        }
        
    if (((Y >= y1) && (y2 >= Y)) || ((Y <= y1) && (y2 <= Y)))
        {
            yBetweenLine1 
    = true;
        }
        
    if (((X >= x3) && (x4 >= X)) || ((X <= x3) && (x4 <= X)))
        {
            xBetweenLine2 
    = true;
        }
        
    if (((Y >= y3) && (y4 >= Y)) || ((Y <= y3) && (y4 <= Y)))
        {
            yBetweenLine2 
    = true;
        }

        
    return xBetweenLine1 && yBetweenLine1 && xBetweenLine2 && yBetweenLine2;
    }
  • 相关阅读:
    常用数据结构之字符串
    c++知识点总结--友元&运算符重载
    c++知识点总结-模板特化
    c++知识点总结--new的一些用法
    linux socket c/s上传文件
    STL之算法使用简介
    【bzoj2733】 HNOI2012—永无乡
    【bzoj3132】 Sdoi2013—森林
    【bzoj1483】 HNOI2009—梦幻布丁
    【bzoj3091】 城市旅行
  • 原文地址:https://www.cnblogs.com/xingyukun/p/1390138.html
Copyright © 2020-2023  润新知