I’ve been studying an AI book titled “Programming game AI by Example” by
Currently, i’m stuck at Wandering. The book implements the wandering
algorithm by creating a wander circle and setting a point to move at
random points on the circle circumference. The circle is then projected
in front of the agent and a force drives the agent towards the direction
of that point, which creates a wandering effect.
I’ve followed the code in the book but somehow the agent does not move
at all. The code is a windows forms project in C# and the agent is
represented by a picturebox control.
I created a class called steering and in the constructor, a point is set
randomly on the circle. m_vWanderTarget is a vector2D type.
double theta = RandomNumber(0,1) * TwoPi;
//create a vector to a target position on the wander circle
m_vWanderTarget = new Vector2D(m_dWanderRadius * Math.Cos(theta),m_dWanderRadius * Math.Sin(theta));
The main algorithm is contained in the Wander method. The random displacement is added to the target and it is normalised and reprojected back into the wander circle. Then the circle is projected back in front of the agent.
m_dWanderJitter is the max amount of random displacement to add, m_dWanderRadius is the radius of the circle and m_vWanderDistance is the distance the circle is in front of the agent.
double JitterThisTimeSlice = m_dWanderJitter * 0.7;
m_vWanderTarget += new Vector2D(RandomNumber(-1.1,1.1) * JitterThisTimeSlice,
RandomNumber(-1.1,1.1) * JitterThisTimeSlice);
m_vWanderTarget *= m_dWanderRadius;
Vector2D target = m_vWanderTarget + new Vector2D(m_dWanderDistance, 0);
Vector2D Target = transform.PointToWorldSpace(target,m_pVehicle.GetHeading(),
return target - m_pVehicle.GetPos();
The method for PointToWorldSpace converts the point from local to world
space. AgentHeading is the unit vector representing the agent’s
direction. AgentSide is the vector perpendicular to AgentHeading while
AgentPosition is the location.
public Vector2D PointToWorldSpace(Vector2D point, Vector2D AgentHeading,
Vector2D AgentSide, Vector2D AgentPosition)
//make a copy of the point
Vector2D TransPoint = point;
//create a transformation matrix
C2DMatrix matTransform = new C2DMatrix();
matTransform.Rotate(ref AgentHeading, ref AgentSide);
//now transform the vertices
//applies a 2D transformation matrix to a single Vector
//multiplies the final transformation matrix with the vector
The code which uses the resulting vector to move the picturebox control
is not shown as it worked correctly with other movement algorithms.
I’ve checked the code with the one in the book for typos but it looks
Is there anything incorrect with the wander code or the transformation
Please log in or register to post a reply.