7 votos

¿Cómo se determina si un punto se encuentra dentro de un polígono?

Dadas las coordenadas de un punto $(x, y)$ ¿Cuál es el procedimiento para determinar si se encuentra dentro de un polígono cuyos vértices son $(x_1, y_1), (x_2, y_2), \ldots , (x_n,y_n)$ ?

2 votos

¿Es el polígono más general o es un polígono simple? o incluso un polígono convexo?

0 votos

Tengo que admitir que estaba imaginando un polígono convexo (de hecho, originalmente un triángulo es lo que tenía en mente, pero pensé que también podría hacer la pregunta más general). Lo dejaré sin la restricción de la convexidad, pero quizás alguien haga la pregunta más sencilla sobre el caso del triángulo. No lo consideraría un duplicado de mi pregunta, ya que los casos especiales pueden tener algoritmos especiales.

2 votos

Creo que voy a dejar esto aquí para la posteridad: Punto-en-polígono en Wikipedia . La respuesta de Casebash describe el algoritmo de fundición de rayos, mientras que rondan acaba de publicar el algoritmo de número de bobinado.

8voto

prakash Puntos 18075

Asumiré que el polígono no tiene intersecciones entre las aristas excepto en las esquinas. Llama al punto $(x_0, y_0)$ . En primer lugar, determinamos si estamos en una línea, lo cual es sencillo si utilizamos la sustitución y la comprobación del rango. Para la comprobación del rango, supongamos que tenemos un segmento $(x_1, y_1)$ , $(x_2, y_2)$ . Comprobamos que $x_1\leq x_0\leq x_2$ o $x_2\leq x_0\leq x_1$ y hacer lo mismo para $y$ .

Ahora, si no estamos en una línea, dibujamos una semirrecta desde el punto y contamos cuántas líneas se cruzan. Si la línea no interseca una esquina o contiene un segmento no degenerado de una arista, entonces un número impar de intersecciones debería significar que estás dentro y un número par significa fuera.

Si nos cruzamos con una esquina, es más difícil. Evidentemente, el rayo podría salir con sólo intersecar una esquina, pero también podría pasar por la esquina sin entrar en el polígono. Una solución es elegir el rayo de manera que no intersecte una esquina o vaya a lo largo de una línea - esto debería ser siempre posible. También podemos utilizar el producto cruzado para determinar si estamos cruzando las líneas en su esquina o no (sólo hay que comprobar si los vértices adyacentes están en el mismo lado de la línea o no).

2 votos

0 votos

Lolz, acabo de darme cuenta de que cuando originalmente rellené las cajas de las esquinas, en realidad rellené las cajas de las esquinas

1voto

Eric Haskins Puntos 4214

Representar un polígono por su trayectoria de aristas puede no ser lo más útil, especialmente si se quiere preguntar por la inclusión de muchos puntos. Considere triangulación del polígono que es trivial para polígonos convexos, y no es difícil de encontrar O(n log(n)) para casos más peludos. Entonces, determinar si el punto está en el polígono se reduce a si está en alguno de los triángulos, lo cual es fácil.

0 votos

Si el problema implica probar muchos puntos en el mismo polígono. Se puede hacer en O(log n) por consulta con el método de refinamiento de triangulación de Kirkpatrick. Que es como triangular el polígono en diferentes niveles.

1voto

Michelle Puntos 14

Si el polígono es: $A,B,C,D,E,F$
y el punto es P.
( $\text{(angle)}_1$ = ángulo entre $PA$ y $PB$ )
( $\text{angle}_2$ = ángulo entre $PB$ y $PC$ )
( $\text{(angle)}_3$ = ángulo entre $PC$ y $PD$ )
( $\text{(angle)}_4$ = ángulo entre $PD$ y $PE$ )
( $\text{(angle)}_5$ = ángulo entre $PE$ y $PF$ )
( $\text{(angle)}_6$ = ángulo entre $PF$ y $PA$ )

En el sentido de las agujas del reloj son positivos
en sentido contrario a las agujas del reloj son negativos

Si ( $\text{(angle)}_1+ ...+ \text{(angle)}_1=2\pi\space \text{or}\space -2\pi$ ) está dentro;
si no (es cero entonces está fuera;)

0 votos

En el comentario de Rahul Nahrain a la pregunta original, este enlace se da; esto coincide con el segundo método dado allí. Para aquellos que estén familiarizados con la topología diferencial o el análisis complejo, éste se basa en el cálculo del número de enrollamiento. +1

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