求助:判断一个圆和一个矩形是否相交

眉形 2009-03-15 11:47:29
有一道面试题是:写一个方法用于判断一个圆和一个矩形是否相交。
这道题的解题思路应该是什么,我用了几种方法都有漏洞,希望不吝赐教。最好是用java写出来,其他语言也没问题,或者只介绍思路也行,多谢了。
...全文
1439 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
hequhecong126317 2010-08-20
  • 打赏
  • 举报
回复
等答案中
soft118_2008 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 chaoyangzhang82 的回复:]
今天面试人员给我说了一个方法:判断矩形一条边上的两个点是否一个在圆内,另外一点在圆外,这样就可以判断了。
但是java中有这些类和方法吗?能否给出具体实现?
[/Quote]
如果矩形长比圆直径大,相交时也可以没有一个定点砸圆内啊
jhr924 2009-03-22
  • 打赏
  • 举报
回复
?
jhr924 2009-03-19
  • 打赏
  • 举报
回复
没下文了?
眉形 2009-03-17
  • 打赏
  • 举报
回复
今天面试人员给我说了一个方法:判断矩形一条边上的两个点是否一个在圆内,另外一点在圆外,这样就可以判断了。
但是java中有这些类和方法吗?能否给出具体实现?
majin777 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wafj1984 的回复:]
public Rectangle getRect() {
return new Rectangle(x, y, WEIGHT, HEIGHT);
}

Rectangle碰撞检测


就是这个 写游戏的时候这个经常用到
[/Quote]
恩,这只能算近似处理了!
猿敲月下码 2009-03-16
  • 打赏
  • 举报
回复
你先用数学的思想把问题解决掉,然后把数学问题转换到程序上来,这个应该不难
眉形 2009-03-16
  • 打赏
  • 举报
回复
4、5、6楼说的方法不对啊,this.getRect().intersects(t.getRect())参数是一个rectangle,矩形跟矩形相交不一定矩形跟圆相交的嘛,你可以画个图,很明显的错误。
晴天v1 2009-03-16
  • 打赏
  • 举报
回复
不好意思,矩形变歪了。
晴天v1 2009-03-16
  • 打赏
  • 举报
回复
请大家帮忙看看这样可以不:


| |
------------------------
| |
| |
----- -----------------
| |
把矩形的边线延长,在除矩形内部区域外的8个区域判断圆心距和矩形中心的距离。
在四个角对应的区域,只要判断 圆半径+对角线/2 是否大于 圆形+矩形中心 。

在上下左右四个区域只要判断相应的x,y坐标。





Coolfatman 2009-03-16
  • 打赏
  • 举报
回复
此外还有大矩形,小圆的情况。
Coolfatman 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jhr924 的回复:]
想了下思路:(以圆点为坐标轴(0,0)点)
1.以圆半径加上矩形长的一半画圆,如果矩形的中点在此圆内 ,则它们相交



有点疏忽, 应该在加上:如果矩形中点在园内,并且4个交点全在圆里或者全在圆外,就不相交
[/Quote]

还是有问题,如果是长矩形,仅一条边与圆相交。就会出现满足条件1 ,且4个顶点全部在圆外。
jhr924 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 Coolfatman 的回复:]
引用 10 楼 jhr924 的回复:
想了下思路:(以圆点为坐标轴(0,0)点)
1.以圆半径加上矩形长的一半画圆,如果矩形的中点在此圆内 ,则它们相交
2.以圆半径加上矩形对角线的一半画圆,如果矩形的中点在此圆外 ,则它们不相交
3.如果矩形中点在1条件的园外,2条件的园内,则判断矩形距离规定圆比较近的长和宽的交点是否在规定圆的里面,如果在就相交,反之


完啦


判断明显有问题,如果大圆小矩形,矩形在圆内,…
[/Quote]

有点疏忽, 应该在加上:如果矩形中点在园内,并且4个交点全在圆里或者全在圆外,就不相交
Coolfatman 2009-03-16
  • 打赏
  • 举报
回复
还是老老实实判矩形的四个线段是否于与圆相交。线段的判法如下:

假设圆心为(0,0)半径R 线段为 (x1,y),(x2,y) (假设是直线,若是斜线,先进行旋转)

若 y的绝对值大于R ,肯定不相交。否则 计算(R^2 - y^2)^0.5 得到交叉点. a1(正),a2(负)
if (a2<=x1 and x1<=a1) and (x2>a1 or x2<a2) then
相交
else if (a2<=x2 and x2<=a1) and (x1>a1 or x1<a2) then
相交
else
不相交。

分别算四段线段就可。
可以把计算线段的部分做成函数调用四次,有1个相交就是相交。
眉形 2009-03-16
  • 打赏
  • 举报
回复
分别求圆心到矩形一边的两个端点和垂点的距离, 设为a,b,c
如果垂点在边线段外, 则检查(a-r)*(b-r),<=0则相交,否则不相交
如果垂点在边线段上, 则只有c<=r(=时相切), 且a或b>r才相交

分别检查4边

这种方法应该是正确的
Coolfatman 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jhr924 的回复:]
想了下思路:(以圆点为坐标轴(0,0)点)
1.以圆半径加上矩形长的一半画圆,如果矩形的中点在此圆内 ,则它们相交
2.以圆半径加上矩形对角线的一半画圆,如果矩形的中点在此圆外 ,则它们不相交
3.如果矩形中点在1条件的园外,2条件的园内,则判断矩形距离规定圆比较近的长和宽的交点是否在规定圆的里面,如果在就相交,反之


完啦
[/Quote]

判断明显有问题,如果大圆小矩形,矩形在圆内,1 的判断就是错的。
wclszh 2009-03-16
  • 打赏
  • 举报
回复
一点思路没有,感觉好难,程序员是没出路了。
liguangwen86 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jhr924 的回复:]
想了下思路:(以圆点为坐标轴(0,0)点)
1.以圆半径加上矩形长的一半画圆,如果矩形的中点在此圆内 ,则它们相交
2.以圆半径加上矩形对角线的一半画圆,如果矩形的中点在此圆外 ,则它们不相交
3.如果矩形中点在1条件的园外,2条件的园内,则判断矩形距离规定圆比较近的长和宽的交点是否在规定圆的里面,如果在就相交,反之


完啦
[/Quote]
jhr924 2009-03-16
  • 打赏
  • 举报
回复
想了下思路:(以圆点为坐标轴(0,0)点)
1.以圆半径加上矩形长的一半画圆,如果矩形的中点在此圆内 ,则它们相交
2.以圆半径加上矩形对角线的一半画圆,如果矩形的中点在此圆外 ,则它们不相交
3.如果矩形中点在1条件的园外,2条件的园内,则判断矩形距离规定圆比较近的长和宽的交点是否在规定圆的里面,如果在就相交,反之



完啦
createWang 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 createWang 的回复:]
以前好像是在一本书见过,叫几何吧,忘了。。
[/Quote]
刚刚翻了一下,在这位兄弟的博客中找到了答案。还有那本数叫《计算机几何》,类似题目很多很多啊。是C++的
加载更多回复(5)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧