73 votos

¿Cómo saber si un punto está dentro de un círculo?

Teniendo un círculo con el centro $(x_c, y_c)$ y el radio $r$, ¿cómo saber si un punto $(x_p, y_p)$ está dentro del círculo?

5 votos

¿Conoces la fórmula para la distancia entre dos puntos, dadas sus coordenadas?

0 votos

Bien, definitivamente ayudaría.

3 votos

¿Dentro del radio? ¿Te refieres dentro del círculo?

115voto

DiGi Puntos 1925

La distancia entre $\langle x_c,y_c\rangle$ y $\langle x_p,y_p\rangle$ está dada por el teorema de Pitágoras como $$d=\sqrt{(x_p-x_c)^2+(y_p-y_c)^2}\;.$$ El punto $\langle x_p,y_p\rangle$ está dentro del círculo si $dr$. Puedes ahorrarte un poco de trabajo comparando $d^2$ con $r^2$ en su lugar: el punto está dentro del círculo si $d^2r^2$. Por lo tanto, quieres comparar el número $(x_p-x_c)^2+(y_p-y_c)^2$ con $r^2$.

32voto

clintp Puntos 5127

El punto está dentro del círculo si la distancia desde él hasta el centro es menor que $r$. Simbólicamente, esto es $$\sqrt{|x_p-x_c|^2+|y_p-y_c|^2}< r.$$

1 votos

No diría que está dentro del círculo cuando la distancia es $ r $.

2 votos

Depende de si incluyes el límite. Si no lo haces, reemplaza $\leq$ con $<$.

5 votos

Yo diría que estás confundiendo el disco (cerrado) con el círculo. Un punto a una distancia $r$ del centro está dentro del disco pero no dentro del círculo; más bien, está en el círculo. (Es un punto bastante menor, pero hay suficientes ocasiones de confusión terminológica que prefiero evitarlo cuando es fácil hacerlo).

5voto

Rod Carvalho Puntos 1939

Alex y Brian ya han respondido tu pregunta. En caso de que estés tratando de implementar este algoritmo en algún lenguaje de programación, aquí está mi implementación en Haskell:

distance :: Floating a => (a, a) -> (a, a) -> a
distance (x1,y1) (x2,y2) = sqrt((x1-x2)**2 + (y1-y2)**2)

isInsideCircle :: (Ord a, Floating a) => a -> (a, a) -> (a, a) -> Bool
isInsideCircle r (xc,yc) (x,y) | (distance (xc,yc) (x,y) < r) = True
                               | (distance (xc,yc) (x,y) >= r) = False

Supongamos que tienes un círculo cuyo radio es $r = 1$ y cuyo centro es el origen $(0,0)$. Te gustaría saber si $(\frac{1}{2},0)$, $(1,0)$ y $(1,1)$ están dentro del círculo. La siguiente sesión interactiva con GHCi responde la pregunta:

*Main> isInsideCircle 1 (0,0) (0.5,0)
True
*Main> isInsideCircle 1 (0,0) (1,0)
False
*Main> isInsideCircle 1 (0,0) (1,1)
False

1 votos

Aquí también está la implementación en Kotlin: fun isInsideCircle(x: Float, y: Float, circleX: Float, circleY: Float, circleRadius: Float): Boolean { val absX = Math.pow(Math.abs(x - circleX).toDouble(), 2.0) val absY = Math.pow(Math.abs(y - circleY).toDouble(), 2.0) return Math.sqrt(absX + absY) < circleRadius }

0 votos

@YuriySeredyuk Ese código en Kotlin es innecesariamente ineficiente. Usar Math.pow es una forma muy ineficiente de multiplicar dos números, especialmente porque toma un double como exponente. Math.abs no es necesario, porque elevar al cuadrado un número negativo también resultará en un valor positivo. La raíz cuadrada tampoco es necesaria cuando multiplicas circleRadius por sí mismo (elevando al cuadrado ambos lados de la comparación). Las únicas operaciones que necesitas son la suma, la resta y la multiplicación.

5voto

user75079 Puntos 1

Si tienes la ecuación del círculo, simplemente sustituye el valor de x e y de tu punto (x, y). Después de resolver el problema, verifica si los valores obtenidos son mayores que, menores que, o iguales al valor r^2. Si es mayor, entonces el punto está fuera del círculo. Si es menor, el punto está dentro del círculo. Si es igual, el punto se encuentra en el círculo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X