如何创建随机数据但有意义的关系?

时间:2012-12-23 23:31:17

标签: javascript arrays object data-structures

    var lc_relationship={"sensor1":[
        {
            "ObjectID":"sens1_001",
            "Parent":null,
            "child": sens2_050
            "z cordinate": -5
        },
        {
            "ObjectID":"sens1_002",
            "Parent":null,
            "child": sens2_072
            "z cordinate": -5

        }
       .
       .
       .
   uptill ObjectID : sens1_100
],
"sensor2":[
        {
             "ObjectID":"sens2_001",
            "Parent":sens1_068,
            "child": sens3_010
            "z cordinate": 0 

        },
        {
            "ObjectID":"sens2_002",
            "Parent":sens1_040,
            "child": sens3_080
            "z cordinate": 0

        }
       .
       .
       .
   uptill ObjectID : sens2_100
],
"sensor3":[
        {
            "ObjectID":"sens3_001",
            "Parent":sens2_055,
            "child": null
            "z cordinate": 5

        },
        {
            "ObjectID":"sens3_002",
            "Parent":sens2_029,
            "child": null
            "z cordinate": 5

        }
       .
       .
       .
   uptill ObjectID : sens3_100
]

}

enter image description here

我需要将几何关系存储在某些数据结构中,以便以后应该有助于跟踪任意方式以访问派生的几何。我制作了一张细节图片,以便人们可以获得更好的想法。有人可以帮忙..?

1 个答案:

答案 0 :(得分:1)

如果我理解了你的问题,那么你有非常具体的数据(100个 cones 分为3层),你想要随机化的是它们之间的关系。

如果是这样,那么下一个代码可能会为您提供所需的内容:它从第一层随机选取一个圆锥,然后设置与随机选择的圆锥的关系。第二层,其中还设置与第三层中随机选择的圆锥的关系(在任何图层中没有选择圆锥两次,如在您的描述中)。这是一个带有工作实现的jsFiddle:http://jsfiddle.net/roimergarcia/j2uLE

注意:

  • 可以从传感器阵列的索引轻松生成图纸上的10x10网格。
  • 如果要生成每层超过100个锥体(100000?)或大量图层,则可能需要优化此算法。
//A helping function
function rightPad(number) {
    var tmpStr = number.toString();
    return ("000" + tmpStr).substring(tmpStr.length, tmpStr.length+3);
}

//The generator function 
function generateData(){

    var nSize = 100,
        lc_relationship,
        aSensor1 = [],
        aSensor2 = [],
        aSensor3 = [],

    lc_relationship = {
        "sensor1":[],
        "sensor2":[],
        "sensor3":[]
    }

    for(i=1; i<=nSize; i++){
        aSensor1.push(i);
        aSensor2.push(i);
        aSensor3.push(i);
    }

    for(n=0; n<nSize; n++){
        var pos1 = Math.floor(Math.random() * (nSize-n));
        var pos2 = Math.floor(Math.random() * (nSize-n));
        var pos3 = Math.floor(Math.random() * (nSize-n));

        var int1 = aSensor1[pos1]; aSensor1.splice(pos1,1);
        var int2 = aSensor2[pos2]; aSensor2.splice(pos2,1);
        var int3 = aSensor3[pos3]; aSensor3.splice(pos3,1);

        lc_relationship.sensor1[int1-1]  = {
            "ObjectID" : "sens1_" + rightPad(int1),
            "Parent":null,
            "child": "sens2_" + rightPad(int2),
            "z cordinate": -5
        } 

        lc_relationship.sensor2[int2-1]  = {
            "ObjectID" : "sens2_" + rightPad(int2),
            "Parent":"sens1_" + rightPad(int1),
            "child": "sens3_" + rightPad(int3),
            "z cordinate": 0
        }

        lc_relationship.sensor3[int3-1]  = {
            "ObjectID" : "sens3_" + rightPad(int3),
            "Parent":"sens2_" + rightPad(int2),
            "child": null,
            "z cordinate": 5
        }


    }

    return lc_relationship;
}

console.log(generateData());