Polígono dentro del problema de generalización poligonal


9

Me gustaría disculparme por todas las publicaciones a continuación. Elegí el foro equivocado para publicar esto originalmente. Sin embargo, en lugar de hacer de esto un desperdicio completo, he reelaborado la pregunta para que sea un verdadero problema de "Ciencia de la Computación Teórica".

Problema: cree un algoritmo que tome un conjunto de n puntos ordenados en un plano 2D que forme el contorno de un polígono A simple que puede ser cóncavo o no y cree un nuevo polígono B con m puntos de manera que:

  1. todos los puntos en A están contenidos dentro de B
  2. 3 <= m <n
  3. B es el polígono en el conjunto de todos los B con el área más pequeña
  4. B debe ser un polígono simple (es decir, sin intersecciones propias).
  5. La entrada al algoritmo es el polígono A y "m".
  6. Se permite la coincidencia de segmentos en B con segmentos en A.

Algunos ejemplos de entradas y salidas esperadas:

  1. Si A es un cuadrado ym es 3, entonces B sería el triángulo con el área de superficie más pequeña que contiene A.
  2. Si A es un hexágono ym es 4, entonces B sería un cuadrilátero con el área de superficie más pequeña que contiene A.

Buena suerte a todos los que prueben este problema. Puedo prometerle que esto será muy difícil, especialmente ahora que la solución debe ser óptima.


1
@ Joe: No es cierto: si A es un cuadrado, Thirian está pidiendo el triángulo de área mínima que contiene A. Por otro lado, si A es un triángulo ( ), entonces no hay una solución válida. n=3
Jeffε

3
Agregue 17 a mi primer comentario, supongo. ¿Por qué 20?
Jeffε

3
¿No es FFT un umbral bajo para "complicado"?
Sasho Nikolov

2
No creo que sea del todo cierto que el problema no cambie en absoluto si (por ejemplo) establece m = 3. El problema es que puede requerir un tiempo exponencial en m, y eso está bien si m está fijado en algún número, pero no está bien si m es parte de la entrada.
Suresh Venkat

55
"todo el mundo sabe cuál es el problema" no es cierto. Estamos preguntando porque las opciones no especificadas hacen la diferencia.
Suresh Venkat

Respuestas:


10

No sé cómo se ven sus polígonos, pero tal vez una versión simplificada del algoritmo Ramer-Douglas-Peucker sea ​​suficiente:

  • para cada parte convexa , calcule el área de los triángulos formado por tres puntos consecutivos;P i P i + 1 P i + 2AjPiPi+1Pi+2
  • para cada parte cóncava , calcule el área de los dos triángulos y formado por la extensión de los dos puntos y el punto medioP i P i P i + 1 P i + 1 P i + 2 P i + 2 P i , P i + 2 P i + 1BkPiPiPi+1Pi+1Pi+2Pi+2Pi,Pi+2Pi+1
  • calcule el y elimine el punto correspondiente (y los puntos de desplazamiento si la operación se realiza en la parte cóncava);min{Aj,Bk}
  • bucle hasta que se hayan eliminado los puntos .nm

ingrese la descripción de la imagen aquí
El borde del polígono ( triángulos verdes , triángulos rojos ). A la derecha, el borde después de la eliminación de dos puntos.B kAjBk

Para algoritmos más complejos, puede buscar " técnicas de generalización de polígonos " aunque su primera condición (los puntos en A están contenidos en B) implica algunas operaciones de escalado adicionales.


@Suresh: Estoy bastante seguro de que los 4 votos a favor actuales son para la transparencia, no para el algoritmo (casi trivial) :)
Marzio De Biasi

1
Esto sufre el mismo problema que los algoritmos Ramer-Douglas-Peucker: ¡no se garantiza que la salida sea un polígono simple!
Jeff el

1
@Jeffe: tienes razón, pero (lejos de ser óptimo si el polígono es complejo) se pueden evitar las simplificaciones que conducen a un conflicto . Al final, si hay otros puntos que deben eliminarse pero no se puede evitar el polígono no simple, utilice un método de resolución de conflictos (por ejemplo, calcule puntos de intersección y descarte completamente los "agujeros"). Sin embargo, me gustaría ver un ejemplo real del OP.
Marzio De Biasi

1
@MarzioDeBiasi Eso podría funcionar. Pero puede que no. Creo que es posible que cada simplificación que describas provoque una auto-intersección. Y "tirar bucles" puede empeorar las cosas, no mejorarlas. Esta es probablemente una buena solución en la práctica, ¡pero recuerda dónde estamos!
Jeffε

Gracias Marzio, ¡ahora al menos sé cómo se llaman este tipo de problemas ahora! Lamentablemente, la solución que dio es qué (3) y (4) están en mis soluciones sugeridas y (4) tiene un problema. Las elipses que están muy estiradas y, por lo tanto, tienen puntas afiladas con ángulos de aproximadamente 30 grados y menos, violarán fácilmente el requisito (1).
Thirlan

6

Hace mucho tiempo escribí un artículo que detallaba un algoritmo de tiempo lineal para encontrar el triángulo de área más pequeño que encierra un conjunto de puntos (o un polígono):

J. O'Rourke, Alok Aggarwal, Sanjeev Maddila, Michael Baldwin, "Un algoritmo óptimo para encontrar triángulos envolventes mínimos", J. Algorithms , 1986, 7 : 258--269. Enlace .

Nuestro trabajo fue seguido por un algoritmo general:

"Área mínima que circunscribe los polígonos", Alok Aggarwal, JS Chang y Chee K. Yap, The Visual Computer , Volumen 1, Número 2 (1985), 112-117. Enlace .

Puede usar Google Scholar para rastrear esos documentos posteriores que los citan para encontrar mejoras y trabajos relacionados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.