今天寫了一個很簡單的判斷平面座標系統兩線段是否相交的演算法

來源:互聯網
上載者:User

 

/// <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;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.