Check if two given circles touch or intersect each other
There are two circles A and B with their centres C1(x1, y1) and C2(x2, y2) and radius R1 and R2. The task is to check both circles A and B touch each other or not.
Examples :
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
Approach:
Distance between centres C1 and C2 is calculated as
C1C2 = sqrt((x1 – x2)2 + (y1 – y2)2).
There are three conditions that arise.
- If C1C2 <= R1 – R2: Circle B is inside A.
- If C1C2 <= R2 – R1: Circle A is inside B.
- If C1C2 < R1 + R2: Circle intersects each other.
- If C1C2 == R1 + R2: Circle A and B are in touch with each other.
- Otherwise, Circle A and B do not overlap
Below is the implementation of the above approach:
// C++ program to check if two
// circles touch each other or not.
#include <bits/stdc++.h>
using namespace std;
int circle(int x1, int y1, int x2, int y2, int r1, int r2)
{
double d = sqrt((x1 - x2) * (x1 - x2)
+ (y1 - y2) * (y1 - y2));
if (d <= r1 - r2) {
cout << "Circle B is inside A";
}
else if (d <= r2 - r1) {
cout << "Circle A is inside B";
}
else if (d < r1 + r2) {
cout << "Circle intersect to each other";
}
else if (d == r1 + r2) {
cout << "Circle touch to each other";
}
else {
cout << "Circle not touch to each other";
}
}
// Driver code
int main()
{
int x1 = -10, y1 = 8;
int x2 = 14, y2 = -24;
int r1 = 30, r2 = 10;
circle(x1, y1, x2, y2, r1, r2);
return 0;
}
// Java program to check if two
// circles touch each other or not.
import java.io.*;
class GFG {
static void circle(int x1, int y1, int x2, int y2,
int r1, int r2)
{
double d = Math.sqrt((x1 - x2) * (x1 - x2)
+ (y1 - y2) * (y1 - y2));
if (d <= r1 - r2) {
System.out.println("Circle B is inside A");
}
else if (d <= r2 - r1) {
System.out.println("Circle A is inside B");
}
else if (d < r1 + r2) {
System.out.println("Circle intersect"
+ " to each other");
}
else if (d == r1 + r2) {
System.out.println("Circle touch to"
+ " each other");
}
else {
System.out.println("Circle not touch"
+ " to each other");
}
}
// Driver code
public static void main(String[] args)
{
int x1 = -10, y1 = 8;
int x2 = 14, y2 = -24;
int r1 = 30, r2 = 10;
circle(x1, y1, x2, y2, r1, r2);
}
}
// This article is contributed by vt_m.
# Python program to check if two
# circles touch each other or not.
import math
# Function to check if two circles touch each other
def circle(x1, y1, x2, y2, r1, r2):
d = math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
if(d <= r1 - r2):
print("Circle B is inside A")
elif(d <= r2 - r1):
print("Circle A is inside B")
elif(d < r1 + r2):
print("Circle intersect to each other")
elif(d == r1 + r2):
print("Circle touch to each other")
else:
print("Circle not touch to each other")
# Driver code
x1, y1 = -10, 8
x2, y2 = 14, -24
r1, r2 = 30, 10
# Function call
circle(x1, y1, x2, y2, r1, r2)
# This code is contributed by Aman Kumar
// C# program to check if two
// circles touch each other or not.
using System;
class GFG {
static void circle(int x1, int y1, int x2, int y2,
int r1, int r2)
{
double d = Math.Sqrt((x1 - x2) * (x1 - x2)
+ (y1 - y2) * (y1 - y2));
if (d <= r1 - r2) {
Console.Write("Circle B is inside A");
}
else if (d <= r2 - r1) {
Console.Write("Circle A is inside B");
}
else if (d < r1 + r2) {
Console.Write("Circle intersect"
+ " to each other");
}
else if (d == r1 + r2) {
Console.Write("Circle touch to"
+ " each other");
}
else {
Console.Write("Circle not touch"
+ " to each other");
}
}
// Driver code
public static void Main(String[] args)
{
int x1 = -10, y1 = 8;
int x2 = 14, y2 = -24;
int r1 = 30, r2 = 10;
circle(x1, y1, x2, y2, r1, r2);
}
}
// This article is contributed by Pushpesh Raj.
// JavaScript program to check if two circles touch each other or not.
function circle(x1, y1, x2, y2, r1, r2) {
var d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
if (d <= r1 - r2) {
console.log("Circle B is inside A");
} else if (d <= r2 - r1) {
console.log("Circle A is inside B");
} else if (d < r1 + r2) {
console.log("Circle intersect to each other");
} else if (d === r1 + r2) {
console.log("Circle touch to each other");
} else {
console.log("Circle not touch to each other");
}
}
// Driver code
var x1 = -10, y1 = 8;
var x2 = 14, y2 = -24;
var r1 = 30, r2 = 10;
circle(x1, y1, x2, y2, r1, r2);
// this code is contributed by devendra
Output
Circle touch to each other
Time Complexity: O(log(n)) because using inbuilt sqrt function
Auxiliary Space: O(1)
This article is contributed by Aarti_Rathi and Dharmendra kumar.
Contact Us