Comprobar si dos círculos dados se tocan o se cruzan entre sí

Hay dos círculos A y B con sus centros C1(x1, y1) y C2(x2, y2) y radio R1 y R2 . La tarea es verificar que ambos círculos A y B se toquen entre sí o no.

Ejemplos:  

Entrada: C1 = (3, 4)
        C2 = (14, 18)
        R1 = 5, R2 = 8
Salida: Los círculos no se tocan entre sí.

Entrada: C1 = (2, 3)
        C2 = (15, 28)
        R1 = 12, R2 = 10
Salida: Los círculos se cruzan entre sí.

Entrada: C1 = (-10, 8)
        C2 = (14, -24)
        R1 = 30, R2 = 10

Aproximación: La
distancia entre los centros C1 y C2 se calcula como

 C1C2 = sqrt((x1 – x2) 2 + (y1 – y2) 2 ).

Hay tres condiciones que se presentan.

  1. Si C1C2 <= R1 – R2: el círculo B está dentro de A.
  2. Si C1C2 <= R2 – R1: el círculo A está dentro de B.
  3. Si C1C2 < R1 + R2: Los círculos se cruzan entre sí.
  4. Si C1C2 == R1 + R2: Los círculos A y B están en contacto entre sí.
  5. De lo contrario, haga un círculo en A y no se superpongan

A continuación se muestra la implementación del enfoque anterior: 

C++

// 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

// 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.
Producción

Circle touch to each other

Tiempo Complejidad: O(1) 
Espacio Auxiliar: O(1)

Este artículo es una contribución de Aarti_Rathi y Dharmendra kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *