Si tiene un círculo con centro (center_x, center_y)
y radio radius
, ¿cómo prueba si un punto dado con coordenadas (x, y)
está dentro del círculo?
309
Si tiene un círculo con centro (center_x, center_y)
y radio radius
, ¿cómo prueba si un punto dado con coordenadas (x, y)
está dentro del círculo?
Respuestas:
En general,
x
yy
debe satisfacer(x - center_x)^2 + (y - center_y)^2 < radius^2
.Tenga en cuenta que los puntos que satisfacen la ecuación anterior con
<
reemplazado por==
se consideran los puntos en el círculo, y los puntos que satisfacen la ecuación anterior con<
reemplazado por>
se consideran fuera del círculo.fuente
<=
encontrará puntos dentro del círculo o en su borde.Matemáticamente, Pitágoras es probablemente un método simple como muchos ya han mencionado.
Computacionalmente, hay formas más rápidas. Definir:
Si es más probable que un punto esté fuera de este círculo , imagine un cuadrado dibujado a su alrededor de modo que sus lados sean tangentes a este círculo:
Ahora imagine un diamante cuadrado dibujado dentro de este círculo de modo que sus vértices toquen este círculo:
Ahora hemos cubierto la mayor parte de nuestro espacio y solo queda una pequeña área de este círculo entre nuestro cuadrado y el diamante que se probará. Aquí volvemos a Pitágoras como arriba.
Si es más probable que un punto esté dentro de este círculo , invierta el orden de los primeros 3 pasos:
Los métodos alternativos imaginan un cuadrado dentro de este círculo en lugar de un diamante, pero esto requiere un poco más de pruebas y cálculos sin ventaja computacional (el cuadrado interior y los diamantes tienen áreas idénticas):
Actualizar:
Para aquellos interesados en el rendimiento, implementé este método en c, y compilé con -O3.
Obtuve tiempos de ejecución por
time ./a.out
Implementé este método, un método normal y un método ficticio para determinar la sobrecarga de tiempo.
Normal: 21.3s This: 19.1s Overhead: 16.5s
Entonces, parece que este método es más eficiente en esta implementación.
fuente
inCircleN
, está utilizando ABS innecesario. Probablemente sin ABS la diferencia entreinCircle
yinCircleN
sería menor.Puede usar Pitágoras para medir la distancia entre su punto y el centro y ver si es más bajo que el radio:
EDITAR (punta de sombrero para Paul)
En la práctica, la cuadratura suele ser mucho más barata que sacar la raíz cuadrada y, dado que solo estamos interesados en hacer un pedido, podemos, por supuesto, renunciar a la raíz cuadrada:
Además, Jason señaló que
<=
debería reemplazarse<
y, dependiendo del uso, esto podría tener sentidoaunque creo que no es cierto en el sentido matemático estricto. Estoy corregido.fuente
**
o^
. La forma más rápida de hacerlo cuando sólo se necesita x ^ 2 o x ^ 3 es hacerlo "manualmente":x*x
.Esto es más eficiente y legible. Evita la costosa operación de raíz cuadrada. También agregué un cheque para determinar si el punto está dentro del rectángulo delimitador del círculo.
La verificación del rectángulo es innecesaria, excepto con muchos puntos o muchos círculos. Si la mayoría de los puntos están dentro de los círculos, la verificación del rectángulo delimitador hará que las cosas sean más lentas.
Como siempre, asegúrese de considerar su caso de uso.
fuente
Calcular la distancia
eso está en C # ... convertir para usar en python ...
fuente
Debe verificar si la distancia desde el centro del círculo hasta el punto es menor que el radio, es decir
fuente
Como se dijo anteriormente, use la distancia euclidiana.
fuente
Encuentra la distancia entre el centro del círculo y los puntos dados. Si la distancia entre ellos es menor que el radio, entonces el punto está dentro del círculo. Si la distancia entre ellos es igual al radio del círculo, entonces el punto está en la circunferencia del círculo. Si la distancia es mayor que el radio, entonces el punto está fuera del círculo.
fuente
La siguiente ecuación es una expresión que prueba si un punto está dentro de un círculo dado donde xP e yP son las coordenadas del punto, xC e yC son las coordenadas del centro del círculo y R es el radio de ese círculo dado.
Si la expresión anterior es verdadera, entonces el punto está dentro del círculo.
A continuación se muestra una implementación de muestra en C #:
fuente
Esta es la misma solución mencionada por Jason Punyon , pero contiene un ejemplo de pseudocódigo y algunos detalles más. Vi su respuesta después de escribir esto, pero no quise eliminar la mía.
Creo que la forma más fácil de entender es calcular primero la distancia entre el centro del círculo y el punto. Yo usaría esta fórmula:
Luego, simplemente compare el resultado de esa fórmula, la distancia (
d
), con elradius
. Si la distancia (d
) es menor o igual que el radio (r
), el punto está dentro del círculo (en el borde del círculo sid
yr
son iguales).Aquí hay un ejemplo de pseudocódigo que se puede convertir fácilmente a cualquier lenguaje de programación:
Donde
circle_x
ycircle_y
es las coordenadas del centro del círculo,r
es el radio del círculo, yx
yy
son las coordenadas del punto.fuente
Mi respuesta en C # como una solución completa de cortar y pegar (no optimizada):
Uso:
fuente
Como se indicó anteriormente, para mostrar si el punto está en el círculo, podemos usar lo siguiente
Para representarlo gráficamente podemos usar:
fuente
Usé el siguiente código para principiantes como yo :).
incirkel de clase pública {
fuente
Entrando en el mundo de 3D si quieres comprobar si un punto 3D está en una Esfera de Unidad, terminas haciendo algo similar. Todo lo que se necesita para trabajar en 2D es usar operaciones de vectores 2D.
fuente
Sé que faltan algunos años desde la respuesta mejor votada, pero he logrado reducir el tiempo de cálculo en 4.
Solo necesita calcular los píxeles a partir de 1/4 del círculo, luego multiplicar por 4.
Esta es la solución a la que he llegado:
fuente
Aquí está el código simple de Java para resolver este problema:
y las matemáticas detrás de esto: /math/198764/how-to-know-if-a-point-is-inside-a-circle
fuente
PHP
fuente