0

なぜこれがうまくいかないのか、一生理解できません。

var refP = [];
var distance = function (p1, p2) {
    return dist(p1.x, p1.y, p2.x, p2.y);
}
while (refP.length < 24) {
    var pusher = {
        x: -1,
        y: -1,
        closestRefP: 9999999
    };
    pusher.x = (random(0, 400));
    pusher.y = (random(0, 400));
    for (var d = 0; d < refP.length; d++) {
        if (distance(pusher, refP[d]) < pusher.closestRefP) {
            pusher.closestRefP = distance(pusher, refP[d]);
        }
    }
    if (pusher.closestRefP > 2) {
        refP[refP.length] = pusher;
    }
}

最後のifステートメントを削除して無条件にプッシャーをrefPにプッシュしても、ループは発生しません。

ありがとう。そして、このコードをクリーンアップする必要があるかどうか、またはコードを減らして問題を切り分ける必要があるかどうかを教えてください。

4

1 に答える 1

2

あなたのrandomdist機能は正しく動作しますか?

distance関数を次のものに置き換えます。

var distance = function (point1, point2) {
  var xs = 0;
  var ys = 0;

  xs = point2.x - point1.x;
  xs = xs * xs;

  ys = point2.y - point1.y;
  ys = ys * ys;

  return Math.sqrt( xs + ys );
}

そしてこれであなたのrandom(0, 400)呼び出し:

pusher.x = Math.floor(Math.random() * 400);
pusher.y = Math.floor(Math.random() * 400);

私のために働いた。

于 2013-05-25T11:42:47.103 に答える