Ejemplo n.º 1
0
    private int [,,] brushFire(Queue <ItemMapaDistancias> cola, int [,,] mapa)
    {
        while (cola.Count > 0)
        {
            ItemMapaDistancias   actual     = cola.Dequeue();
            ItemMapaDistancias[] siguientes = siguienteCeldas(actual);

            foreach (ItemMapaDistancias item_dis in siguientes)
            {
                int pos_x = item_dis.x + (ancho / 2);
                int pos_z = item_dis.z + (largo / 2);

                //Esta dentro de nuestro array
                if (pos_x >= 0 && pos_z >= 0 && pos_x <= ancho && pos_z <= largo)
                {
                    if (array_mapa_obstaculos [pos_x, pos_z, 0] == Constantes._LIBRE)                //Si es obstaculo no hace falta calcular nada
                    {
                        if (mapa [pos_x, pos_z, 0] > item_dis.distancia)                             //Si es mayor es que hemos enconstrado un obstaculo mas cercano
                        {
                            mapa [pos_x, pos_z, 0] = item_dis.distancia;

                            cola.Enqueue(item_dis);
                        }
                    }
                }
            }
        }

        return(mapa);
    }
Ejemplo n.º 2
0
    private ItemMapaDistancias[] siguienteCeldas(ItemMapaDistancias actual)
    {
        ItemMapaDistancias [] siguientes = new ItemMapaDistancias[8] {
            new ItemMapaDistancias(),
            new ItemMapaDistancias(),
            new ItemMapaDistancias(),
            new ItemMapaDistancias(),
            new ItemMapaDistancias(),
            new ItemMapaDistancias(),
            new ItemMapaDistancias(),
            new ItemMapaDistancias()
        };
        ItemMapaDistancias[] movimientos = new ItemMapaDistancias[8] {
            new ItemMapaDistancias(0, 0, 1, 10),               // adelante
            new ItemMapaDistancias(-1, 0, 1, 14),              // adelante izquierda
            new ItemMapaDistancias(-1, 0, 0, 10),              // izquierda
            new ItemMapaDistancias(-1, 0, -1, 14),             // atras izquierda
            new ItemMapaDistancias(0, 0, -1, 10),              // atras
            new ItemMapaDistancias(1, 0, -1, 14),              // atras derecha
            new ItemMapaDistancias(1, 0, 0, 10),               // derecha
            new ItemMapaDistancias(1, 0, 1, 14)                // adelante derecha
        };

        int indice = 0;

        foreach (ItemMapaDistancias item_sig in movimientos)
        {
            siguientes [indice].x = actual.x + item_sig.x;
            siguientes [indice].y = actual.y + item_sig.y;
            siguientes [indice].z = actual.z + item_sig.z;

            siguientes [indice].distancia = actual.distancia + item_sig.distancia;

            indice++;
        }

        return(siguientes);
    }
Ejemplo n.º 3
0
    private int[,,] crearMapaHeuristicaObstaculos()
    {
        int [,,] mapa_heuristica_obstaculos = new int[ancho + 1, largo + 1, 1];

        Queue <ItemMapaDistancias> cola = new Queue <ItemMapaDistancias> ();

        //mapa.setRadio (0.5f);

        //int inicio_ancho = (ancho / 2) * (-1);
        //int inicio_largo = (largo / 2) * (-1);

        //rellenamos el mapa antes de empezar
        for (int i = 0; i <= ancho; i++)
        {
            for (int j = 0; j <= largo; j++)
            {
                mapa_heuristica_obstaculos [i, j, 0] = int.MaxValue;
            }
        }

        int x_meta = Mathf.RoundToInt(vector_meta.x + (ancho / 2));
        int z_meta = Mathf.RoundToInt(vector_meta.z + (largo / 2));

        mapa_heuristica_obstaculos [x_meta, z_meta, 0] = 0;

        ItemMapaDistancias celda_meta = new ItemMapaDistancias();

        celda_meta.x         = x_meta - (ancho / 2);
        celda_meta.y         = 0;
        celda_meta.z         = z_meta - (largo / 2);
        celda_meta.distancia = 0;

        cola.Enqueue(celda_meta);

        brushFire(cola, mapa_heuristica_obstaculos);

        return(mapa_heuristica_obstaculos);
    }
Ejemplo n.º 4
0
    private int[,,] crearMapaDistancias()
    {
        int [,,] mapa_distancias = new int[ancho + 1, largo + 1, 1];

        Queue <ItemMapaDistancias> cola = new Queue <ItemMapaDistancias> ();

        mapa.setRadio(0.5f);

        //int inicio_ancho = (ancho / 2) * (-1);
        //int inicio_largo = (largo / 2) * (-1);

        //rellenamos el mapa antes de empezar
        for (int i = 0; i <= ancho; i++)
        {
            for (int j = 0; j <= largo; j++)
            {
                mapa_distancias [i, j, 0] = int.MaxValue;

                if (array_mapa_obstaculos [i, j, 0] == Constantes._OBSTACULO)
                {
                    ItemMapaDistancias celda = new ItemMapaDistancias();

                    mapa_distancias [i, j, 0] = 0;

                    celda.x         = i - (ancho / 2);
                    celda.y         = 0;
                    celda.z         = j - (largo / 2);
                    celda.distancia = 0;

                    cola.Enqueue(celda);
                }
            }
        }

        brushFire(cola, mapa_distancias);

        return(mapa_distancias);
    }