me gustaría encontrar un mejor algoritmo para resolver el siguiente problema:no se cortan segmentos de línea y reducir al mínimo la longitud acumulada
Hay N puntos de partida (púrpura) y N puntos de destino (verde) en 2D. Quiero un algoritmo que conecte los puntos de partida con los puntos objetivo por un segmento de línea (marrón) sin que ninguno de estos segmentos se intersecte (rojo) y minimice la longitud acumulativa de todos los segmentos.
Mi primer esfuerzo en C++ fue permutar todos los estados posibles, encontrar estados libres de intersección, y entre ellos el estado con longitud mínima de segmento total O (n!). Pero creo que tiene que haber una mejor manera.
Alguna idea? O buenas palabras clave para la búsqueda?
¿Tal vez algún tipo de tipo topológico? –
No sé la respuesta tampoco, pero crearía cualquier solución (ignorando conflictos) y luego resolvería el conflicto individualmente: cuando dos líneas entran en conflicto, parece que el cambio de un par de puntos finales resuelve el conflicto. Aunque no estoy seguro de cómo garantizar el progreso. –
@ DietmarKühl: Cambiar los puntos finales podría causar que aparezca un conflicto diferente. –