zoukankan      html  css  js  c++  java
  • 今天写了一个很简单的判断平面坐标系两线段是否相交的算法

    /// <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;
    }
  • 相关阅读:
    [Codeup 25482]选美
    [Codeup 25481] swan
    暑假集训D12总结
    [技术]浅谈重载操作符
    2020年寒假第6次学*进度记录
    2020年寒假第5次学*进度记录
    2020年寒假第4次学*进度记录
    “家庭记账本”软件开发(1)
    阅读《梦断代码》随笔(1)
    2020年寒假第三次学*进度记录
  • 原文地址:https://www.cnblogs.com/xingyukun/p/1390138.html
Copyright © 2011-2022 走看看