查找圆圈是否在另一个圆圈内

Bat*_*oid 11 java math

我有点麻烦.我有一项任务,要求我查找第二个圆圈是重叠,内部还是第二个圆圈.但是,我无法检查重叠,如果第二个圆圈在第一个圆圈内.

(使用的变量是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");
}
Run Code Online (Sandbox Code Playgroud)

我担心问题在于重叠和内部检查,但我无法弄清楚如何正确设置它以便我可以可靠地检查第二个圆是否在第一个圆圈内.

任何帮助或建议将非常感激,因为我尝试了多种方法,但解决方案每次都让我逃避.

Dam*_*uid 14

您只需要在重叠之前检查内部,因为内部距离<=重叠距离

if (distance > (r1 + r2)) 
{
    // No overlap
    System.out.println("Circle2 does not overlap Circle1");
}
else if ((distance <= Math.abs(r1 - r2)) 
{
    // Inside
    System.out.println("Circle2 is inside Circle1");
}
else              // if (distance <= r1 + r2)
{
   // Overlap
   System.out.println("Circle2 overlaps Circle1");
} 
Run Code Online (Sandbox Code Playgroud)

根据克里斯的评论修改了答案


Chr*_*ris 9

这个问题可能最容易在视觉上解决,然后编写代码.你看起来像是没有内部和完全内部的正确逻辑.

解决这个问题的简单方法是,如果它们没有完全在内部而不是完全在外面,那么它们必须重叠.这当然是我编码的方式.数学比其他两个有点棘手.

if (distance > (r1 + r2)) {
    // No overlap
    System.out.println("Circle2 does not overlap Circle1");
} else if ((distance <= Math.abs(r1 - r2)) {
    // Inside
    System.out.println("Circle2 is inside Circle1");
{ else {
    // Overlap
    System.out.println("Circle2 overlaps Circle1");
}
Run Code Online (Sandbox Code Playgroud)

实际情况是:

r2>r1-dr2 < r1+d

通过对称,我们不需要同时进行两种方式(如果你在两者中交换r2和r1并进行一些重新排列,你会得到同一对方程式).

最容易将其留在"其他"类别中,而不是编码,除非您出于某种原因需要.