处理 3 中的 randomGaussian()

randomGaussian() in Processing 3

感谢您提出这个问题。

我刚刚学会了如何在 处理 3 中使用 randomGaussian()。 根据文档,这个函数

Returns a float from a random series of numbers having a mean of 0 and standard deviation of 1.

我创造了这样的运动

if (x < mouseX){
    x+= randomGaussian();
  } else {
    x-= randomGaussian();
  }

Post-answered-supplementary-notes: x is an integer;

int x;

其他相关代码仅关于绘制...

ellipse(x,height/2,8,8);

是啊,我想让物体朝着鼠标的方向移动, 但事实证明

物体的移动总是负向的(无论鼠标在哪,都向左移动。

如果我写

    x+= randomGaussian()+1;

它会起作用 properly.My 个人对这个函数的理解是 returns 近似于 [-1,1] 的数学集合(并且多数聚类在平均值 0 附近)。

不过我的理解好像有误

我想知道为什么原始代码不像我想的那样...(我把这句话打下来后,我意识到这一定是一道宇宙题。

感谢阅读。

我不确定你的问题是什么或你想做什么,但答案很可能是:

x += Math.abs( randomGaussian() ); 要么 x -= Math.abs( randomGaussian() );

我认为你实际上想要控制方向,因为你的设置是 -1 到 1 可能对你没有那么有用(向它添加一个会使它看起来像 0-2 一样工作) .

其次,如果我没记错的话,MouseX/Y 是整数(默认情况下不是处理整数坐标吗?),您可能没有充分移动它们以使其有所不同,所以通过添加一个你'再突然影响一下就够了。

我的建议是在您绘制的任何内容上使用高斯作为标量,这样您就可以看到发生了什么。更像是:

float scalar = Math.abs( randomGaussian() ); //0 -> 100% leaning towards 0
float amount = 10f; //10 pixels or whatever
if(moveLeft) {
  x += amount * scalar;
} else {
  x -= amount * scalar;
}

(如果这在某种程度上有用,我肯定会完善您的问题以帮助其他人。我喜欢看到处理问题,所以我很乐意提供帮助——但是您的问题越准确,您的回答就越好在这样的网站上:P)

我的猜测是您将 x 存储为 int 值。请记住,int 值只能包含整数,如 150200 等。它们不能包含小数,如 1.5 或 [=18] =].

所以当你有一个像 50 这样的 int 值并向它添加一个像 0.5 这样的小数时,50.5 值被 截断 又变成了 50。换句话说,它不会改变。但是如果你有 50 并从中减去 0.5,它就变成 49.5,它被截断为 49。这就是为什么您只会看到价值下降的原因。

要解决这个问题,只需将 x 值声明为 float,这样它就可以保存十进制值。

另请注意,这没有意义:

if (x < mouseX){
  x+= randomGaussian();
} else {
  x-= randomGaussian();
}

randomGaussian() 函数 returns 一个介于 -11 之间的值。加上或减去它都没有关系,因为大约 50% 的时间它会是负数。

相反,您需要移动返回的值,例如,向其添加 2,或者您可以只使用常规的 random() 函数,该函数采用您想要的范围的参数要包含的值。可以在 the reference.

中找到更多信息