0

この素晴らしいパスファインディング php 関数をhttp://granularreverb.com/a_star.phpから javascriptに変換しようとしています。

PHP 関数

function path_float(&$heap, &$values, $i, $index) {
        for (; $i; $i = $j) {
            $j = ($i + $i%2)/2 - 1;
            if ($values[$heap[$j]] < $values[$index])
                break;
            $heap[$i] = $heap[$j];
        }
        $heap[$i] = $index;
}

JAVASCRIPT 関数

var $path_f;
var $path_h;
var $path_g;
var $path_open_heap;


function path_float($path_open_heap, $path_f, i, index) { // return heap & values

    var j;

    for (; i; i = j) {

        j = (parseInt(i) + parseInt(i)%2)/2 - 1;

            if($path_f[$path_open_heap[j]] < $path_f[index] ){
            break;
        }

      $path_open_heap[i] = $path_open_heap[j];

    }
    $path_open_heap[i] = index;

}

javascript がすべての要素なしで for() を理解するかどうかわかりませんか? JavaScript 関数を実行しようとすると、ブラウザがフリーズします。

Ps 私は同じ php と js 関数が必要なので、事前に作成された js パスディンディングには興味がありません。

前もって感謝します

4

1 に答える 1

0

forPHP と同様に、javascript のすべての要素なしで使用できます。それは問題ではありません。

問題は J に返される float だと思います。実際にはそうでは0なく、大きな float のような0.00000000001ものである可能性があり、false と評価されることはありません。残念ながら、入力値が提供されていないため、テストできません。

次のことを試してください。

var $path_f;
var $path_h;
var $path_g;
var $path_open_heap;


function path_float($path_open_heap, $path_f, i, index) { // return heap & values

    var j;

    for (; i; i = parseInt(j)) {

        j = (parseInt(i) + parseInt(i)%2)/2 - 1;

            if($path_f[$path_open_heap[j]] < $path_f[index] ){
            break;
        }

      $path_open_heap[i] = $path_open_heap[j];

    }
    $path_open_heap[i] = index;

}
于 2013-05-29T10:39:48.747 に答える