0

サブ配列を含む次の配列があります (各サブ配列は HTML5 キャンバス上の座標のペアです)。

var myArray = [[364, 124], 
               [192, 272], 
               [209, 217], 
               [332, 227], 
               [241, 273], 
               [356, 387], 
               [104, 185], 
               [361, 380], 
               [297, 390], 
               [371, 311], 
               [191, 293]];

座標の各ペアを比較して、各値が少なくとも 10 離れていることを確認するにはどうすればよいですか。

例: 数値 272 (インデックス 1 の配列から) と数値 273 (インデックス 4 の配列から) を比較します。1 つしか離れていないため、1 つの値に 10 を追加します。

これが私が試したことです:

ここでは数字をランダムに生成していますが、最後に生成されたペアだけに関連付けることができます。

function crosses(){
    var crossx, crossy, oldCrossx, oldCrossy, col;
    for(var i=0; i<=10; i++){

    crossx = randomFromInterval(100, xw-100);
    crossy = randomFromInterval(100, xh-100);


    if(crossesPos.length > 0){
        oldCrossx = crossesPos[i-1][0];
        oldCrossy = crossesPos[i-1][1];
        if(crossx - oldCrossx < 20){
            crossx += 10;
        }
        if(crossx - oldCrossx < -20 ){
            crossx -= 10;
        }
        if(crossy - oldCrossy < 20){
            crossy += 10;
        }
        if(crossy - oldCrossy < -20 ){
            crossy -= 10;
        }
    }
}

だから私は新しいアプローチを考えていました.すべての数値が生成され、すでに配列になった後にデータを変更します.

私は間違ったアプローチを取っていると考えています:

数値を生成するためのより良い方法が必要なのかもしれません。現在、この関数を使用して特定の間隔で数値を生成しています。

function randomFromInterval(from,to){
        return Math.floor(Math.random()*(to-from+1)+from);
    }
4

1 に答える 1

1

jsFiddle デモ

var myArray = [
    [364, 124],
    [192, 272],
    [209, 217],
    [332, 227],
    [241, 273],
    [356, 387],
    [104, 185],
    [361, 380],
    [297, 390],
    [371, 311],
    [191, 293]
];

function distTen(element, index, array) {
    for (x = 0; x < 10; x++) {
        if (Math.abs(element[0] - array[x][0]) < 10) array[x][0] += 10;
        if (Math.abs(element[1] - array[x][1]) < 10) array[x][1] += 10;
    }
}

function logIt(element, index, array) {
    console.log("a[" + index + "] = " + element);
}
myArray.forEach(distTen);
myArray.forEach(logIt);

結果

a[0] = 394,134
a[1] = 202,302
a[2] = 229,227
a[3] = 342,247
a[4] = 251,303
a[5] = 376,407
a[6] = 114,195
a[7] = 381,390
a[8] = 307,410
a[9] = 401,321
a[10] = 191,293
于 2013-08-13T19:05:35.120 に答える