public void findNodoTest() { Cerrados cerrados = new Cerrados(); bool comprobar; Nodo comprobar_nodo; Nodo nodo = new Nodo(); nodo.vector = new Vector3(1.0f, 0.0f, 0.0f); nodo.coste = 1.0f; cerrados.add(nodo); comprobar = cerrados.find(nodo, out comprobar_nodo); Assert.IsTrue(comprobar_nodo.coste == nodo.coste && comprobar_nodo.vector == nodo.vector, "6) No es el mismo nodo que introducimos"); Assert.IsTrue(comprobar, "7) No se ha encontrado el nodo que introducimos"); cerrados.delete(nodo); comprobar = cerrados.find(nodo, out comprobar_nodo); Assert.IsNull(comprobar_nodo, "8) No tenia que haber encontrado el nodo"); Assert.IsFalse(comprobar, "9) No tenia que haber encontrado el nodo"); }
public void addNodoTest() { Cerrados cerrados = new Cerrados(); Nodo nodo_comprobar; bool comprobar; Nodo nodo = new Nodo(); nodo.vector = new Vector3(1.0f, 0.0f, 0.0f); nodo.coste = 1.0f; cerrados.add(nodo); comprobar = cerrados.find(nodo, out nodo_comprobar); Assert.IsTrue(comprobar && nodo_comprobar.coste == nodo.coste && nodo_comprobar.vector == nodo.vector, "1) No es el mismo nodo que introducimos"); }
public override bool pasoCalcularRuta(out bool error) { error = false; if (abiertos.count() > 0 && !meta_encontrada) { nodo_actual = abiertos.getFirst(); if (esMeta(nodo_actual, vector_meta)) { meta_encontrada = true; nodo_final = nodo_actual; v_trayectoria = vectoresCamino(nodo_final); n_trayectoria = nodosCamino(nodo_final); } else { cerrados.add(nodo_actual); if (dibujar_casillas) { parrilla.visualizarCasilla(nodo_actual.vector, Constantes._CERRADOS); } sucesores = CalcularSucesores(nodo_actual, vector_meta, mapa); foreach (Nodo sucesor in sucesores) { Nodo anterior; if (abiertos.find(sucesor, out anterior)) { if (anterior.coste > sucesor.coste) { anterior.padre = nodo_actual; anterior.coste = sucesor.coste; anterior.costeG = sucesor.costeG; anterior.costeH = sucesor.costeH; //Para el hybrid anterior.sentido = sucesor.sentido; anterior.vector_hybrid = sucesor.vector_hybrid; anterior.angulo_hybrid = sucesor.angulo_hybrid; abiertos.updatePrioridad(anterior, anterior.coste); } } else { if (cerrados.find(sucesor, out anterior)) { if (anterior.coste > sucesor.coste) { cerrados.delete(anterior); abiertos.add(sucesor); if (dibujar_casillas) { parrilla.visualizarCasilla(sucesor.vector, Constantes._ABIERTOS); } } } else //No esta ni en abiertos ni en cerrados { abiertos.add(sucesor); if (dibujar_casillas) { parrilla.visualizarCasilla(sucesor.vector, Constantes._ABIERTOS); } } } } } } else //abiertos esta vacio { if (abiertos.count() == 0) { error = true; } } return(meta_encontrada); }