• 《算法问题实战策略》-chaper15-计算几何-线段相交


      这篇文章着力来讨论线段相交这一个问题。

      给出两条线段,如何判断这两条线段相交?

      如果这两条线段相交,如何求其交点?

      

      线段相交问题通常由于其繁杂的情况种类而让人避而远之,在这里希望通过笔者的简化讨论希望帮读者的思路进行一下梳理。

      首先我们尝试画几个几何图像来找一下线段相交的一些不同的情况,这里需要注意,可能有读者会好奇,这些直观上来看没什么差别的相交情况,我们为什么为认为他们是不同的呢?答案是,这里我们需要将几何特征用代数表达是进行判断,因此不同的几何特征虽然都表示线段相交,但是对应的代数表达式不一定相同。

     

     

                             

       

      简单的函数代码如下:

    //一般情况线段相交的判断
    
    bool SegmentIntersects(Point a1 , Point a2 , Point b1 , Point b2)
    
    {
    
        double c1 = Cross(a2-a1 , b1-a1);
    
        double c2 = Cross(a2-a1 , b2-a1);
    
        double c3 = Cross(b2-b1 , a1-b1);
    
        double c4 = Cross(b2-b1 , a2-b1);
    
          if(dcmp(c1)*dcmp(c2) == 0 && dcmp(c3)*dcmp(c4) == 0)
    
          {
    
                if(OnSegment(Point a1 , Point b1 ,Point b2) || OnSegment(Point a2 , Point b1 ,Point b2)||a1==b1 || a1 == b2)
    
                      return true;
    
                else
    
                      return false;
    
          }
    
         
    
          return if(dcmp(c1)*dcmp(c2) <= 0 && dcmp(c3)*dcmp(c4) <= 0)
    
    }
  • 相关阅读:
    js中 var let const 区别
    img标签src引用网络图片,响应403的解决方法
    统计开发push数据
    gp日志查看
    node之path模块
    算法相关问题
    常用的 curl 发送 http 请求 命令
    Python与Go列表切片越界的对比
    golang时间与时区相关操作总结
    go语言结构体转map的方法
  • 原文地址:https://www.cnblogs.com/rhythmic/p/5744158.html
Copyright © 2020-2023  润新知