java查找一个圆是否在另一个圆内
我有点麻烦。我有一项作业,要求我找出第二个圆是重叠的、在第二个圆之内的,还是两者都没有。然而,我在检查重叠以及第二个圆是否在第一个圆内时遇到了问题
(使用的变量为x1、x2、y1、y2、r1、r2、距离)
以下是我所拥有的:
if (distance > (r1 + r2)) {
// No overlap
System.out.println("Circle2 does not overlap Circle1");
} else if (distance <= Math.abs(r1 + r2)) {
// Overlap
System.out.println("Circle2 overlaps Circle1");
} else if ((distance <= Math.abs(r1 - r2)) {
// Inside
System.out.println("Circle2 is inside Circle1");
}
我担心问题在于重叠和内部检查,但我不知道如何正确设置,以便可靠地检查第二个圆圈是否在第一个圆圈内
任何帮助或建议都将不胜感激,因为我尝试了多种方法,但每次都无法找到解决方案
# 1 楼答案
重叠前只需检查内侧,因为内侧的距离为<;=重叠距离
根据Chris的评论修改答案
# 2 楼答案
你就快到了。这只是条件的顺序不对
在“非重叠”案例之后检查“内部”案例,确保不会意外地将其视为重叠。那么所有其他的都必须是重叠的
# 3 楼答案
这个问题可能最简单的方法是先直观地解决,然后再编写代码。你看起来有正确的逻辑,不在里面,完全在里面
解决这个问题的简单方法是,如果它们不完全在内部,也不完全在外部,那么它们必须重叠。这当然是我编写代码的方式。这道数学题比另外两道题要难一点
实际情况是:
r2>r1-d
和r2 < r1+d
根据对称性,我们不需要做两个循环(如果你在两个循环中交换r2和r1,并重新排列,你会得到相同的方程对)
不过,除非出于某种原因需要,否则最简单的方法是将其留在“else”类别中,而不是为其编码
# 4 楼答案
这是一项简单的任务
取两个圆的半径之和。说r1+r2。 现在求出两个圆心之间的距离,即sqrt((x1-x2)^2+(y1-y2)^2)
if r1+r2 = sqrt((x1-x2)^2 + (y1-y2)^2) they just touch each other. if r1+r2 > sqrt((x1-x2)^2 + (y1-y2)^2) the circle overlaps(intersect) if r1+ r2 < sqrt((x1-x2)^2 + (y1-y2)^2) the circle doesnot intersect
# 5 楼答案
按注释代理编辑以获得明显性:
毕达哥拉斯描述了空间中点到点之间的距离:
这当然可以翻译成代码
距离在r1+r2处接触
编辑线索前: 你需要两个圆之间的角度
然后计算从圆1到圆2的距离。如果它小于半径1+半径2,你就在里面
atan2可能是一个感兴趣的函数
或者直接用毕达哥拉斯距离
# 6 楼答案
如果距离和较小半径之和小于另一个半径,较小的圆应该在较大的圆内