2011-10-27 33 views
7

Tengo polígonos definidos con sus vértices, y necesito calcular las áreas de su unión e intersección. Lo más inquietante es que está implementado en Mapping Toolbox, pero no puedo comprarlo. ¿Alguien sabe cómo hacer un algoritmo rápido para calcularlo? Gracias por su tiempo.intersección y unión de polígonos

+0

La función es 'polybool'. Y puedo calcular el área con 'polyarea' (que está disponible para mí). – Kate

+0

Creo que no debes pedirle a los usuarios que violen los derechos de autor. Editado –

+0

@Kate: ¿Sus polígonos están garantizados para ser convexos? – Jacob

Respuesta

0

He encontrado puntos de intersección de mis polígonos y ha añadido vértices que se encuentran dentro/polígonos fuera para la tarea intersección/unión (comprobar si alguno de los vértices del polígono 1 se encuentra dentro de un versa polígono 2 y vice usando 'inpolygon '). Luego, todos los puntos se transformaron en coordenadas polares con el centro en las coordenadas medias de la matriz y se ordenaron por ángulo, de modo que ahora forman un contorno cerrado consecutivo. Sabiendo esto, es fácil encontrar el área de intersección/unión usando 'polyarea'.

1

lo haría así:

  1. Vamos S el conjunto de vértices de ambos polígonos.
  2. para cada borde e en polígono 1
    1. para cada borde e en polígono 2
      1. Si e cruza con e
        1. Añadir el punto de intersección a S
  3. Retire todos los vértices en S que están dentro del polígono 1 o 2.

El conjunto resultante de vértices debe compensar la unión de los polígonos.

para la intersección sólo tiene que quitar todos los vértices en S que son fuera de ambos polígono 1 y 2 (en la tercera etapa).

(Se puede consultar el punto de intersección y "dentro de polígonos" se utiliza para comprobar otra parte ;-)

+0

gracias por su respuesta, pero ¿cómo puedo encontrar puntos de intersección? ¿Es necesario usar la ecuación de una línea? – Kate

+0

Agregué dos enlaces a mi respuesta. – aioobe

+0

gracias. Sé matemáticas, pero desafortunadamente no soy un programador muy bueno, por lo que tener códigos es muy bueno. – Kate

0

La idea es romper todos los cruzan el borde en cuatro partes y formar un nuevo polígono con estos. Cuando desee la unión, tome los dos bordes externos. Si quieres intersección, toma los dos bordes internos.

+0

Una gran respuesta daría un ejemplo. –

3

Solo necesita encontrar el área de intersección; el área de la unión se obtiene trivialmente de eso. El paquete PolygonIntersection de FEX podría ser útil.

enter image description here

+1

¿Puedes mostrar un pseudocódigo para que podamos implementarlo en otros idiomas también? – Pacerier

Cuestiones relacionadas