您的位置:首页 > 其它

给定平面上的圆(圆心坐标和半径长度)和一个正方形(四个点的坐标)判断两者是否有交点。

2013-03-06 12:22 1416 查看
题目重述(来自面试题):(初稿,未改错别字。)

用最简单, 最快速的方法计算出下面这个圆形是否和正方形相交。

3D坐标系 原点(0.0,0.0,0.0)

圆形:

半径r = 3.0

圆心o = (*.*, 0.0, *.*)

正方形:

4个角坐标

1:(*.*, 0.0, *.*)

2:(*.*, 0.0, *.*)

3:(*.*, 0.0, *.*)

4:(*.*, 0.0, *.*)

判断圆形和正方形是否相交。

思路:

我们首先做一个图,由四个坐标点组成的正方形和它的四条边的延长线把平面区域分为3个部分如下所示,我们可以通过判断圆心在哪一个区域,进一步判断圆和正方形是否相交。于是问题分为两部分,先判断圆心所在的区域,然后在判断圆心是否和正方形相交。

如何判断给定的圆心在哪个区域?

解决方法如下:

首先计算圆心到正方形四条边的距离,计为a,b,c,d。并假设 a和c是对应的正方形的一对平行的边到圆心的距离,c和d是对应的另一对平行的边到圆心的距离。

那么可以作如下判断:设正方形边长为len,那么如果且b+d=len那么圆心在区域(1)里面。

如果|a-c|=len而且|b-d|=len 说明圆心在区域(3)里面。

其他情况下(也就是a和c 或b和d中有一组和为len 另一组差的绝对值为len,也就是a+c=len且|b-d|=len 或者|a-c|=len且b+d=len)那么圆心在区域(2)中。

知道圆心所在的区域了 ,下面就应该求正方形和圆是否相交了。

假设圆心到四条线的距离分别为a,b,c,d。正方形的顶点到圆心的距离分别为LA,LB,LC,LD

如果在区域(1),那么直接求 min(la,lb,lc,ld) 如果小于等于r则 相交,否则不想交。

如果在区域(2),那么要么|a-c|=len要么|b-d|=len。 假设是|a-c|=len ,那么只要判断min(a,c)是否小于等于半径就行了 小于等于就相交否则不想交。

如果在区域(3),直接判断min(LA,LB,LC,LD)是否小于等于r,满足就相交否则就不想交。(当然可以理解为就是四个点是否有在圆内的,这样方便计算直接带入方程即可。)



同样还有另外的思路。

1.如果四个点都在圆内,说明不交

2.有外面的里面的,说明相交

3如果都在圆外面继续判断,在哪个区域(此时只有可能在第二个区域和第一个区域) 第三个区域那种情况肯定不想交,因为如果相交的话就包含在第二种情况里面了。

接着继续按上述方法判断就行了。

总之思路都类似
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐