Dada la coordenada del centro y el radio > 1 de un círculo y la ecuación de una recta. La tarea es verificar si la línea dada choca con el círculo o no. Hay tres posibilidades:
- La línea interseca al círculo.
- La línea toca el círculo.
- La línea está fuera del círculo.
Nota: La ecuación general de una línea es a*x + b*y + c = 0, por lo que solo se dan las constantes a, b, c en la entrada.
Ejemplos:
Input : radius = 5, center = (0, 0), a = 1, b = -1, c = 0. Output : Intersect Input : radius = 5, center = (0, 0), a = 5, b = 0, c = 0. Output : Touch Input : radius = 5, center = (0, 0), a = 1, b = 1, c = -16. Output : Outside
La idea es comparar la distancia perpendicular entre el centro del círculo y la línea con el radio del círculo.
Algoritmo:
1. Encuentra la perpendicular (digamos p) entre el centro del círculo y la línea dada.
2. Compara esta distancia p con el radio r.
……a) Si p > r, entonces la línea está fuera del círculo.
……b) Si p = r, entonces la línea toca el círculo.
……c) Si p < r, entonces la línea interseca al círculo.
¿Cómo encontrar la distancia perpendicular?
La distancia de una línea desde un punto se puede calcular usando la siguiente fórmula:
Consulte Wiki para obtener detalles de la fórmula anterior.
C++
// CPP program to check if a line touches or // intersects or outside a circle. #include <bits/stdc++.h> using namespace std; void checkCollision(int a, int b, int c, int x, int y, int radius) { // Finding the distance of line from center. int dist = (abs(a * x + b * y + c)) / sqrt(a * a + b * b); // Checking if the distance is less than, // greater than or equal to radius. if (radius == dist) cout << "Touch" << endl; else if (radius > dist) cout << "Intersect" << endl; else cout << "Outside" << endl; } // Driven Program int main() { int radius = 5; int x = 0, y = 0; int a = 3, b = 4, c = 25; checkCollision(a, b, c, x, y, radius); return 0; }
Java
// Java program to check if a line touches or // intersects or outside a circle. import java.io.*; class GFG { static void checkCollision(int a, int b, int c, int x, int y, int radius) { // Finding the distance of line from center. double dist = (Math.abs(a * x + b * y + c)) / Math.sqrt(a * a + b * b); // Checking if the distance is less than, // greater than or equal to radius. if (radius == dist) System.out.println ( "Touch" ); else if (radius > dist) System.out.println( "Intersect") ; else System.out.println( "Outside") ; } // Driven Program public static void main (String[] args) { int radius = 5; int x = 0, y = 0; int a = 3, b = 4, c = 25; checkCollision(a, b, c, x, y, radius); } } // This article is contributed by vt_m.
Python3
# python program to check if a line # touches or intersects or outside # a circle. import math def checkCollision(a, b, c, x, y, radius): # Finding the distance of line # from center. dist = ((abs(a * x + b * y + c)) / math.sqrt(a * a + b * b)) # Checking if the distance is less # than, greater than or equal to radius. if (radius == dist): print("Touch") elif (radius > dist): print("Intersect") else: print("Outside") # Driven Program radius = 5 x = 0 y = 0 a = 3 b = 4 c = 25 checkCollision(a, b, c, x, y, radius) # This code is contributed by Sam007
C#
// C# program to check if a line touches or // intersects or outside a circle. using System; class GFG { static void checkCollision(int a, int b, int c, int x, int y, int radius) { // Finding the distance of line from center. double dist = (Math.Abs(a * x + b * y + c)) / Math.Sqrt(a * a + b * b); // Checking if the distance is less than, // greater than or equal to radius. if (radius == dist) Console.WriteLine ("Touch"); else if (radius > dist) Console.WriteLine("Intersect"); else Console.WriteLine("Outside"); } // Driven Program public static void Main () { int radius = 5; int x = 0, y = 0; int a = 3, b = 4, c = 25; checkCollision(a, b, c, x, y, radius); } } // This article is contributed by vt_m.
PHP
<?php // PHP program to check if a line // touches or intersects or outside // a circle. function checkCollision($a, $b, $c, $x, $y, $radius) { // Finding the distance // of line from center. $dist = (abs($a * $x + $b * $y + $c)) / sqrt($a * $a + $b * $b); // Checking if the distance is less than, // greater than or equal to radius. if ($radius == $dist) echo "Touch"; else if ($radius > $dist) echo "Intersect"; else echo "Outside" ; } // Driver Code $radius = 5; $x = 0; $y = 0; $a = 3; $b = 4; $c = 25; checkCollision($a, $b, $c, $x, $y, $radius); // This code is contributed by Sam007 ?>
Javascript
<script> // JavaScript program to check if a line touches or // intersects or outside a circle. function checkCollision(a, b, c, x, y, radius) { // Finding the distance of line from center. let dist = (Math.abs(a * x + b * y + c)) / Math.sqrt(a * a + b * b); // Checking if the distance is less than, // greater than or equal to radius. if (radius == dist) document.write ( "Touch" ); else if (radius > dist) document.write( "Intersect") ; else document.write( "Outside") ; } // Driver Code let radius = 5; let x = 0, y = 0; let a = 3, b = 4, c = 25; checkCollision(a, b, c, x, y, radius); // This code is contributed by susmitakundugoaldanga. </script>
Producción :
Touch
Complejidad de tiempo : O(1)
Espacio Auxiliar : O(1)
Este artículo es una contribución de Anuj Chauhan . 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