给定平面上的圆(圆心坐标和半径长度)和一个正方形(四个点的坐标)判断两者是否有交点。
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如果都在圆外面继续判断,在哪个区域(此时只有可能在第二个区域和第一个区域) 第三个区域那种情况肯定不想交,因为如果相交的话就包含在第二种情况里面了。
接着继续按上述方法判断就行了。
总之思路都类似
用最简单, 最快速的方法计算出下面这个圆形是否和正方形相交。
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如果都在圆外面继续判断,在哪个区域(此时只有可能在第二个区域和第一个区域) 第三个区域那种情况肯定不想交,因为如果相交的话就包含在第二种情况里面了。
接着继续按上述方法判断就行了。
总之思路都类似
相关文章推荐
- php函数,通过平面内的四个坐标点判断是否是正方形
- 给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
- 【摘】给定一些单元格的坐标,如何判断它们是否能合并为一个单元格?
- 如何判断一个GPS点是否在以另一个GPS点为圆心100米为半径的圆内(Java代码)
- 给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。
- leetcode动态规划之判断一个字符串是否是给定字符串数组组合出来的
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
- 每天一道算法题(一):给定一个整数,判断这个数是否是回文
- 判断一个指定的经纬坐标是否落在一个多边形区域内?
- 利用正则表达式判断一个给定的字符是否是回文
- 判断一个给定的字符串通过循环移位是否可以包含另一个字符串
- 编写正则表达式,判断给定的是否是一个合法的IP地址。
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- JS判断坐标点是否在给定的多边形内
- 判断几何体是否相交 + 正方形的坐标确定+ 输入scanf格式控制
- 如何判断任意四个点可以组成矩形及正方形 && 点绕另外一个点旋转后的坐标
- 怎样判断一个坐标是否在已知三角形内?
- 已知两圆圆心坐标及半径求两圆交点
- [置顶] 猜数游戏,在键盘上输入一个数,判断是否猜对(给定的数组和随机产生数组)。