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;
    }
  • 相关阅读:
    团队开发中Git冲突解决
    Eclipse使用Git管理项目
    mapper.xml文件中标签不显示问题
    GO语言打包ICO图标
    如何创建 Visual Studio 2017 RC 离线安装包
    Redis系列-远程连接redis并给redis加锁
    Redis开启远程登录连接。
    Redis作为多个Windows服务运行配置方法
    Java课程设计---安装Mysql及管理工具
    Java多线程编程核心技术---多线程技能
  • 原文地址:https://www.cnblogs.com/xingyukun/p/1390138.html
Copyright © 2011-2022 走看看