如何让两个随机数相距一定距离?

时间:2017-02-17 05:39:10

标签: javascript random numbers

我是javascript编程的新手,但我知道我的代码有多乱,所以我很抱歉。我想要做的是创建2(现在,最终版本将有很多)" Trees"现在只是矩形放在随机x值上。但我不希望它们在彼此的40像素范围内。我一直在尝试写一些应该达到这个目标的东西,但是我无法弄清楚它为什么不会起作用,树木依然在彼此之上产生!它让我发疯了。我顺便使用p5js和sublime text 2。

function bg(){
    var tree = Math.floor(Math.random() * (380 - 0) + 00);
    var tree2 = Math.floor(Math.random() * (380 - 0) + 0);
    redefine(tree,tree2);
    this.x=0;

    this.show = function(){
        noStroke();

        //tree
        fill(102, 51, 0);
        rect(this.x+tree , 450, 26, 110);

        //tree2
        fill(102, 51, 0);
        rect(this.x+tree2, 410, 26, 150);   
    }
}

function redefine(first, second){
    if(second<=first-40 || second>=first+40){
        console.log("good");
    } else {
        console.log("redefining")
        second = Math.floor(Math.random() * (380 - 0) + 0);
    }
}

//key
// Math.random() * (max - min) + min    

3 个答案:

答案 0 :(得分:0)

一个问题是你只给你的redefine函数一次机会滚动另一个随机数。您可以将其更改为一个循环,一直尝试,直到他们正确的距离。

答案 1 :(得分:0)

在重新定义中,您尝试更改&#34;第二,&#34;的值。但这不会修改&#34; tree2&#34;因为它是一个局部范围的原始变量。假设你的其他逻辑是合理的,这样的事情可能有用:

function bg(){


var tree = Math.floor(Math.random() * (380 - 0) + 00);
var tree2 = Math.floor(Math.random() * (380 - 0) + 0);

while(isOverlapping(tree, tree2)) {
    tree2 = Math.floor(Math.random() * (380 - 0) + 0);
}

this.x=0;

this.show = function(){
noStroke();

//tree
fill(102, 51, 0);
rect(this.x+tree , 450, 26, 110);

//tree2
fill(102, 51, 0);
rect(this.x+tree2, 410, 26, 150);   
    }
}

function isOverlapping(first, second){
    if(second<=first-40 || second>=first+40){
        console.log("good");
        return false;
    } else {
        console.log("redefining")
        return true;
    }
}

答案 2 :(得分:0)

我建议使用&#34;定义&#34;接近&#34;重新定义&#34;:

function bg() { 

    var tries   =   define(tree, tree2);
    var tree    =   tries[0];
    var tree2   =   tries[1];   


    this.x = 0;

    this.show = function () {
    noStroke();

    //tree
    fill(102, 51, 0);
    rect(this.x + tree, 450, 26, 110);

    //tree2
    fill(102, 51, 0);
    rect(this.x + tree2, 410, 26, 150);
    }

}

function define() {

    var tries       =   [];
        tries[0]    =   0;
        tries[1]    =   0;
    var i           =   0;

    while(tries[1] - tries[0] <=  40 && tries[0] - tries[1] <=  40){

        tries[0]    = Math.floor(Math.random() * (380 - 0) + 0);
        tries[1]    = Math.floor(Math.random() * (380 - 0) + 0);        
        i++;
        console.info('iter:',i,' inside tree:',tries[0],' tree2:',tries[1]);

    }

    return tries;
}