Número de tangentes comunes entre dos círculos si se dan sus centros y radios

Dados dos círculos con un radio y centros dados. La tarea es encontrar el número de tangentes comunes entre estos círculos.
Ejemplos: 
 

Input: x1 = -10, y1 = 8, x2 = 14, y2 = -24, r1 = 30, r2 = 10
Output: 3

Input: x1 = 40, y1 = 8, x2 = 14, y2 = 54, r1 = 39, r2 = 51
Output: 2

Enfoque
 

  • En primer lugar, comprobaremos si los círculos se tocan entre sí externamente, si se cruzan entre sí o si no se tocan en absoluto. ( Consulte aquí )

  • Entonces, si los círculos no se tocan externamente, obviamente tendrán 4 tangentes comunes, dos directas y dos transversales.

  • Si los círculos se tocan externamente, entonces tendrán 3 tangentes comunes, dos directas y una transversal. 
    La tangente intermedia se puede considerar como las tangentes transversales que coinciden entre sí.

  • Si los círculos se cortan entre sí, entonces tendrán 2 tangentes comunes, ambas serán directas.
    •  

  • Si un círculo está dentro de otro círculo, solo tendrán una tangente común.

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

C++

// C++ program to find
// the number of common tangents
// between the two circles
 
#include <bits/stdc++.h>
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 << "There are 3 common tangents"
            << " between the circles.";
    else if (t < 0)
        cout << "There are 4 common tangents"
            << " between the circles.";
    else
        cout << "There are 2 common tangents"
            << " between the circles.";
 
    return 0;
}

Java

// Java program to find
// the number of common tangents
// between the two circles
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 ("There are 3 common tangents"+
                    " between the circles.");
    else if (t < 0)
        System.out.println ("There are 4 common tangents"+
            " between the circles.");
    else
        System.out.println ("There are 2 common tangents" +
                " between the circles.");
 
     
}
}
 
// This code is contributed by ajit.

Python3

# Python3 program to find
# the number of common tangents
# between the two circles
 
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,y1 = -10,8;
x2,y2 = 14,-24;
r1,r2 = 30,10;
 
t = circle(x1, y1, x2,y2, r1, r2);
 
if (t == 1):
    print("There are 3 common tangents between the circles.")
elif (t < 0):
    print("There are 4 common tangents between the circles.")
else:
    print("There are 2 common tangents between the circles.")
 
# This code is contributed by mohit kumar 29

C#

// C# program to find
// the number of common tangents
// between the two circles
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 (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)
        Console.WriteLine ("There are 3 common tangents"+
                    " between the circles.");
    else if (t < 0)
        Console.WriteLine ("There are 4 common tangents"+
            " between the circles.");
    else
        Console.WriteLine ("There are 2 common tangents" +
                " between the circles.");
 
}
}
 
// This code is contributed by Arnab Kundu

PHP

<?php
// PHP program to find
// the number of common tangents
// between the two circles
 
function 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;
    else if ($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)
        echo "There are 3 common tangents"
                ," between the circles.";
    else if ($t < 0)
        echo "There are 4 common tangents"
            , " between the circles.";
    else
        echo "There are 2 common tangents"
            , " between the circles.";
             
    // This code is contributed by AnkitRai01
?>

Javascript

<script>
 
// Javascript program to find
// the number of common tangents
// between the two circles
 
function circle(x1, y1, x2,
        y2, r1, r2)
{
 
    var distSq = (x1 - x2) * (x1 - x2)
                + (y1 - y2) * (y1 - y2);
 
    var radSumSq = (r1 + r2) * (r1 + r2);
 
    if (distSq == radSumSq)
        return 1;
    else if (distSq > radSumSq)
        return -1;
    else
        return 0;
}
 
// Driver code
    var x1 = -10, y1 = 8;
    var x2 = 14, y2 = -24;
    var r1 = 30, r2 = 10;
    var t = circle(x1, y1, x2,
                y2, r1, r2);
    if (t == 1)
        document.write(
"There are 3 common tangents between the circles."
);
    else if (t < 0)
        document.write(
"There are 4 common tangents between the circles."
);
    else
        document.write(
"There are 2 common tangents between the circles."
);
 
</script>

Producción:

There are 3 common tangents between the circles.

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por IshwarGupta 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 *