***************************************************** * Desarrollado por Ødd Øne Øut - www.OddOneOut.info * ***************************************************** 1) Declaramos los polígonos (polígono principal y obstaculos) Cada polígono se almacena en un array y dentro de ese array se crea otro para cada nodo de cada polígono 2) Declaramos el punto de origen y punto de destino 3) Verificamos si el nodo de origen y el nodo de destino se pueden unir por una recta sin pasar por ningún obstáculo Si este fuera el caso...problema resuelto 4) Declaramos un array que incluye todos los nodos de todos los polígonos y los nodos de origen y destino A estos nodos (excepto el de origen) los agregamos a un array de nodos no conectados 5) Buscamos los nodos accesibles desde el nodo de origen y los agregamos a un array de nodos disponibles A cada nodo conectable desde el punto de origen le damos un valor G hipotético que consiste en la distancia desde ese nodo al nodo de origen siguiendo un cierto camino También le asignamos el camino, que en este caso incluiría solamente el nodo de origen y el mismo nodo que estamos analizando 6) Declaramos que el nodo de origen es el nodo actual Luego se repite el siguiente ciclo hasta que se encuentre un camino o no hayan más nodos disponibles: 7) Dentro de los nodos disponibles buscamos el de menor G hipotético 8) El G hipotético es ahora el G óptimo 9) Verificamos si este nodo es el nodo de destino De ser el nodo de destino en el array camino tenemos la resolución del problema 10) Eliminamos este nodo de la lista de nodos no conectados y la lista de nodos disponibles 11) El nodo pasa a ser el nodo actual 12) Buscamos los nodos conectables con el nodo actual que a su vez estén en la lista de nodos no conectados 13) Verificamos si el nodo conectable con el nodo actual tiene definido un G hipotetico De no ser así se le asigna uno que se calcula sumando el G del nodo actual con la distancia entre el nodo actual y el nodo conectable Si ya poseé un valor de G hipotético se compara su valor con el G que tendría pasando por el nodo actual, si es menor se reemplaza su valor Si se le asigna un nuevo G tambien debemos actualizar su camino, el mismo va a pasar a ser el camino del nodo actual con la adición del nodo conectable Si el nodo no se encuentra en la lista de nodos disponibles lo agregamos VARIABLES QUE NECESITAN SER DECLARADAS PREVIAMENTE; * poligonos - ARRAY * solucion - ARRAY * xi - INTEGER * yi - INTEGER (xi e yi son necesarias para la comunicación entre las funciones intersección_rectas e interseccion_segmentos) SCRIPT PRINCIPAL * buscar_camino SCRIPTS SECUNDARIOS * segmento_en_poligono - Verifíca si un segmento determinado se encuentra dentro del polígono principal y no atraviesa obstáculos * poligono - Define las coordenadas de los nodos que forman los polígonos SCRIPTS TERCIARIOS * punto_en_poligono - Indica si un punto se encuentra dentro del polígono principal y fuera de los obstáculos * interseccion_rectas - Nos devuelve el punto de intersección de dos rectas si es que existe * interseccion_segmentos - Nos devuelve el punto de intersección de dos segmentos si es que existe * punto_en_segmento - Nos indica si un punto forma parte de un segmento * distancia - Devuelve la distancia entre dos puntos