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;
    }
  • 相关阅读:
    后缀数组
    后缀树
    字典树
    Revit二次开发: 文件损坏
    遍历取出指定文件夹下所有的文件
    Python类、模块、包的区别
    Opencv-python画图基础知识
    JSON C# Class Generator ---由json字符串生成C#实体类的工具
    Handsontable Dropdown with key-value pair
    怎样监听vue.js中v-for全部渲染完成?
  • 原文地址:https://www.cnblogs.com/xingyukun/p/1390138.html
Copyright © 2011-2022 走看看