码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-08-06 15:57:06      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

  

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

 

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

  技术分享

  技术分享

 

                         

   

  简单的函数代码如下:

 

//一般情况线段相交的判断

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))

                  return true;

            else

                  return false;

      }

     

      return if(dcmp(c1)*dcmp(c2) <= 0 && dcmp(c3)*dcmp(c4) <= 0)

}

 

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

标签:

原文地址:http://www.cnblogs.com/rhythmic/p/5744158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!