/**
    /* @name: findPathTo
    /* @version: 1.0
    /* @Descrition: encontra um caminho do ponto de inicio até o ponto final e retorna uma pilha contendo os passos.
    */
    public Path findPathTo(ponto2D pontoInicio, ponto2D pontoFim)
    {
        /**
            ve se o no atual é o fim, se sim, empilha e retorna pilha de movimentos.
            caso contrário atualiza os nós proximos.
                Se o no proximo já existe, tenta atualizar
                    Caso o euristic value for menor, sobrescreve.
                caso contrário, cria no e bota os valores.
                adiciona cada proximo a lista de abertos se puder.
            pega o proximo no, repete.
        */

        AEstrelaNode inicio = new AEstrelaNode(null, pontoInicio, pontoInicio);
        AEstrelaNode posicaoAtual = inicio;

        while (!posicaoAtual.gridPosition.isEqual(pontoFim))
        {
            vistaNode(posicaoAtual, pontoInicio, pontoFim);
            posicaoAtual = this.proximo(pontoFim);
        }

        Path saida = new Path(posicaoAtual.passosAteInicio);
        while (posicaoAtual != inicio)
        {
            saida.empilha(posicaoAtual.gridPosition);
            posicaoAtual = posicaoAtual.parent;
        }

        return saida;
    }