《算法问题实战策略》-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)

}

 

posted on 2016-08-06 15:16  在苏州的城边  阅读(196)  评论(0编辑  收藏  举报

导航