2016-09-02 3 views
1

В настоящее время я перехожу к «Природе Кода» Даниэля Шиффмана и играю с одним из первых упражнений - простым «RandomWalker()». Я реализовал аналогичные вещи в 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(); 
} 

Является ли это какой-то артефакт случайной функции? Моя первая мысль состоит в том, что это как-то связано с псевдослучайным характером функции, но в учебнике конкретно говорится, что это не должно быть заметно, и все же это происходит каждый раз. Мне было интересно, может быть, что-то не так с моим кодом?

Заранее спасибо.

ответ

2

Ваши x и y переменными являются как 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 

Вот почему вы видите ваши x и y переменные только уменьшается. Чтобы исправить это, просто измените x и y на float, поэтому они отслеживают десятичные знаки.

Если вам действительно нужно x и y быть int значения, то вам нужно stepX и stepY также быть int значения:

int stepX; 
int stepY; 

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

x += stepX; 
y += stepY; 

Но вы, вероятно, просто хотите сохранить x и y в качестве float значений.

PS: Я люблю случайных ходунков!

+0

Отличный ответ, спасибо! –

Смежные вопросы