社区
Java SE
帖子详情
求助:判断一个圆和一个矩形是否相交
眉形
2009-03-15 11:47:29
有一道面试题是:写一个方法用于判断一个圆和一个矩形是否相交。
这道题的解题思路应该是什么,我用了几种方法都有漏洞,希望不吝赐教。最好是用java写出来,其他语言也没问题,或者只介绍思路也行,多谢了。
...全文
1439
25
打赏
收藏
求助:判断一个圆和一个矩形是否相交
有一道面试题是:写一个方法用于判断一个圆和一个矩形是否相交。 这道题的解题思路应该是什么,我用了几种方法都有漏洞,希望不吝赐教。最好是用java写出来,其他语言也没问题,或者只介绍思路也行,多谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
直角三角形(rigtri)
【题目背景】 这是一道传统题 .......。 Endless Endless 一觉醒来,发现自己的电脑中了病毒。 桌面上 的文件全部离奇地消失了,只剩下 的文件全部离奇地消失了,只剩下 三个不
相交
的
矩形
,并且有一行 三个不
相交
的
矩形
,并且有一行 字: “那个成功画出最完美的直角三形人才是这台电脑真正主。 ” Endless Endless 知道自己的行踪被发现了。他想立刻揪出这个在电脑中散布病 ...
java魔王_算法_java_魔王深测器
import java.util.ArrayList;import java.util.List;/*** 题目来源:https://segmentfault.com/q/1010000000519081** 琼斯博士在寻宝的过程中,来到了
一个
平面图呈
矩形
的封闭房间。**
矩形
的宽度为w,高度为h。为方便描述,我们将
矩形
左上角坐标定为(0,0),右下角坐标定为(w,h)。** 房间的入口在
矩形
上沿...
使用Python计算平面多边形间最短距离,数据需要从exce
/分组背包问题,首先考虑
一个
木板的情况://对于
一个
木板而言:dp[i][j],i表示当前是第i次粉刷,粉刷第j块格子的情况。数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力,也就是说,想法很简单,但实现起来 可能就不是那么回事了。本同学是湖南衡阳人,想留长沙,但是长沙的工资不多,加班很多。真心请教各位大佬,某二线大厂运营16×16,公积金12base北京签不签呢,后续就还有一些银行子公司(平安和中邮的消费金融这类)和省分的机会,但是本人学历背景一。
2020牛客寒假算法基础集训营6
H 云 链接:link 来源:牛客网 题目描述 现在天空(可视为二维平面)中有 N 朵 A 类云,M 朵 B 类云,每朵云的形状都可以用边平行于坐标轴的
矩形
来描述。 一开始,A 类云在第三象限,B 类云在第一象限,没有任何云和坐标轴有交点。 随着风的吹拂,A 类云以每秒
一个
单位的速度向右移动,B 类云以每秒
一个
单位的速度向下移动,当一朵 A 类云和一朵 B 类云在某
一个
时刻有了至少
一个
公共点,它们...
算法-蓝桥杯习题(3-3)
蓝桥杯习题 目录 入门训练(详见 算法-蓝桥杯习题(1-1))Go 基础练习(详见 算法-蓝桥杯习题(2-1))Go 基础练习(详见 算法-蓝桥杯习题(2-2))Go 算法训练(详见 算法-蓝桥杯习题(3-1))Go 算法训练(详见 算法-蓝桥杯习题(3-2))Go 算法训练(详见 算法-蓝桥杯习题(3-3))Go 算法训练(详见 算法-蓝桥杯习题(3-4))Go 算...
Java SE
62,623
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章