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