处理 - 为什么我的随机漫步者总是倾向于左上角?

时间:2016-09-02 12:46:15

标签: random processing

我目前正在阅读Daniel Shiffman的“The Code Of Code”,并且一直在玩第一个练习 - 一个简单的'RandomWalker()'。我在Java和Java中实现了类似的东西。没有任何麻烦,但由于某种原因,我的步行者似乎总是或多或少地朝着同一方向前进:

RandomWalker

这种情况100%发生。这是我的代码:

 
class Walker
{
  int x;
  int y;

  // Constructor

  Walker()
  {
    x = width / 2;
    y = height / 2;
  }

  void display()
  {
    stroke(0); // Colour
    point(x, y); // Colours one pixel in
  }

  void step()
  {
    float stepX;
    float stepY;

    stepX = random(-1, 1);
    stepY = random(-1, 1);

    x += stepX;
    y += stepY;
  }
}

Walker w;

void setup()
{
  size(640, 360);
  w = new Walker();
  background(255);
}

void draw()
{
  w.step();
  w.display();
}

这是随机函数的一些人工制品吗?我的第一个想法是它与函数的伪随机性质有关,但教科书明确指出这不应该引人注意,但这种情况每次都会发生。我想知道我的代码是否有问题?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您的xy变量都是int类型。这意味着它们没有小数部分,因此每当您添加或减去它们时,它们都会被截断。以下是一些例子:

 
int x = 1;
x = x + .5;
//1.5 is truncated, and x stays 1

int x = 1;
x = x - .5;
//.5 is truncated, and x becomes 0

这就是为什么您看到xy变量只会减少的原因。要解决此问题,只需将xy更改为float类型,以便跟踪小数。

如果您确实需要xyint个值,那么您需要stepXstepY也是int值:

int stepX;
int stepY;

stepX = (int)random(-5, 5);
stepY = (int)random(-5, 5);

x += stepX;
y += stepY;

但您可能只想将xy存储为float值。

PS:我喜欢随机助行器!