📌  相关文章
📜  检查两个给定的圆圈是否彼此接触或相交

📅  最后修改于: 2021-05-07 05:40:31             🧑  作者: Mango

有两个圆A和B,圆的中心为C1(x1,y1)C2(x2,y2) ,半径为R1R2 。任务是检查圆圈A和圆圈B是否彼此接触。

例子 :

Input : C1 = (3,  4)
        C2 = (14, 18)
        R1 = 5, R2 = 8
Output : Circles do not touch each other.

Input : C1 = (2,  3)
        C2 = (15, 28)
        R1 = 12, R2 = 10
Output : Circles intersect with each other.

Input : C1 = (-10,  8)
        C2 = (14, -24)
        R1 = 30, R2 = 10
Input : -10 8
        14 -24 
        30 10
Output : Circle touch each other.
Distance between centers C1 and C2 is calculated as
 C1C2 = sqrt((x1 - x2)2 + (y1 - y2)2).
There are three condition arises.
1. If C1C2 == R1 + R2
     Circle A and B are touch to each other.
2. If C1C2 > R1 + R2
     Circle A and B are not touch to each other.
3. If C1C2 < R1 + R2
      Circle intersects each other.
C++
// C++ program to check if two 
// circles touch each other or not.
#include 
using namespace std;
  
int circle(int x1, int y1, int x2, 
           int y2, int r1, int r2)
{
    int distSq = (x1 - x2) * (x1 - x2) +
                 (y1 - y2) * (y1 - y2);
    int radSumSq = (r1 + r2) * (r1 + r2);
    if (distSq == radSumSq)
        return 1;
    else if (distSq > radSumSq)
        return -1;
    else
        return 0;
}
  
// Driver code
int main()
{
    int x1 = -10, y1 = 8;
    int x2 = 14, y2 = -24;
    int r1 = 30, r2 = 10;
    int t = circle(x1, y1, x2, 
                   y2, r1, r2);
    if (t == 1)
        cout << "Circle touch to"
             << " each other.";
    else if (t < 0)
        cout << "Circle not touch"
             << " to each other.";
    else
        cout << "Circle intersect"
             << " to each other.";
    return 0;
}


Java
// Java program to check if two 
// circles touch each other or not.
import java.io.*;
  
class GFG 
{
    static int circle(int x1, int y1, int x2, 
                      int y2, int r1, int r2)
    {
        int distSq = (x1 - x2) * (x1 - x2) +
                     (y1 - y2) * (y1 - y2);
        int radSumSq = (r1 + r2) * (r1 + r2);
        if (distSq == radSumSq)
            return 1;
        else if (distSq > radSumSq)
            return -1;
        else
            return 0;
    }
  
    // Driver code
    public static void main (String[] args) 
    {
        int x1 = -10, y1 = 8;
        int x2 = 14, y2 = -24;
        int r1 = 30, r2 = 10;
        int t = circle(x1, y1, x2, 
                       y2, r1, r2);
        if (t == 1)
            System.out.println ( "Circle touch to" +
                                 " each other.");
        else if (t < 0)
            System.out.println ( "Circle not touch" +
                                 " to each other.");
        else
            System.out.println ( "Circle intersect" +
                                 " to each other.");
              
    }
}
  
// This article is contributed by vt_m.


Python3
# Python3 program to
# check if two circles touch
# each other or not.
  
def circle(x1, y1, x2, y2, r1, r2):
   
    distSq = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); 
    radSumSq = (r1 + r2) * (r1 + r2); 
    if (distSq == radSumSq):
        return 1 
    elif (distSq > radSumSq):
        return -1 
    else:
        return 0 
   
  
# Driver code
x1 = -10
y1 = 8 
x2 = 14
y2 = -24 
r1 = 30
r2 = 10 
  
t = circle(x1, y1, x2, y2, r1, r2) 
if (t == 1):
    print("Circle touch to each other.") 
elif (t < 0):
    print("Circle not touch to each other.") 
else:
    print("Circle intersect to each other.") 
  
# This code is contributed by
# Smitha Dinesh Semwal


C#
// C# program to check if two 
// circles touch each other or not.
using System;
  
class GFG 
{
    static int circle(int x1, int y1, int x2, 
                      int y2, int r1, int r2)
    {
        int distSq = (x1 - x2) * (x1 - x2) +
                     (y1 - y2) * (y1 - y2);
        int radSumSq = (r1 + r2) * (r1 + r2);
        if (distSq == radSumSq)
            return 1;
        else if (distSq > radSumSq)
            return -1;
        else
            return 0;
    }
  
    // Driver code
    public static void Main () 
    {
        int x1 = -10, y1 = 8;
        int x2 = 14, y2 = -24;
        int r1 = 30, r2 = 10;
        int t = circle(x1, y1, x2, 
                       y2, r1, r2);
        if (t == 1)
            Console.WriteLine ( "Circle touch" +
                             " to each other.");
        else if (t < 0)
            Console.WriteLine( "Circle not touch" +
                                " to each other.");
        else
            Console.WriteLine ( "Circle intersect" +
                                 " to each other.");
              
    }
}
  
// This code is contributed by vt_m.


PHP
 $radSumSq)
        return -1;
    else
        return 0;
}
  
// Driver code
$x1 = -10; $y1 = 8;
$x2 = 14; $y2 = -24;
$r1 = 30; $r2 = 10;
$t = circle($x1, $y1, $x2, 
            $y2, $r1, $r2);
if ($t == 1)
    echo "Circle touch to each other.";
else if ($t < 0)
    echo "Circle not touch to each other.";
else
    echo "Circle intersect to each other.";
  
// This code is contributed by vt_m.
?>


输出 :

Circle touch to each other.