#include "walk2d.h" #include // for sin and cos #include "mathutils.h" // for pi #include "randgen.h" RandomWalk2D::RandomWalk2D(long maxSteps,int size) : myPosition(), mySteps(0), myStepSize(size), myMaxSteps(maxSteps) // postcondition: walker initialized { } void RandomWalk2D::TakeStep() // postcondition: one step of random walk taken { RandGen gen; // random number generator double randDirection = gen.RandReal(0,2*PI); myPosition.x += myStepSize * cos(randDirection); myPosition.y += myStepSize * sin(randDirection); mySteps++; } void RandomWalk2D::Init() // postcondition: Init step of random walk taken { mySteps = 0; myPosition = Point(0,0); TakeStep(); } bool RandomWalk2D::HasMore() // postcondition: returns false when random walk is finished // i.e., when # of steps taken >= max. # of steps // return true if walk still in progress { return mySteps < myMaxSteps; } void RandomWalk2D::Next() // postcondition: next step in random walk simulated { TakeStep(); } void RandomWalk2D::Simulate() { for(Init(); HasMore(); Next()) { // simulation complete using iterator methods } } long RandomWalk2D::TotalSteps() const // postcondition: returns number of steps taken by molecule { return mySteps; } Point RandomWalk2D::Position() const // postcondition: return molecule's position { return myPosition; } Point RandomWalk2D::Current() const // postcondition: return molecule's position { return myPosition; }