Reasoning about object motion requires the ability to represent direction. There is no explicit directional information in the original scene description, but it can be inferred from information such as the angle of curves and junctions, or from ``parallel proximity''; a segment which is in proximity to another segment, with junctions at each end which are both equidistant from that segment, is known to be parallel to it. The representation of direction requires that the reasoning system be able to relate vertex angles or parallel lines to directions of motion.

Any direction reference is specified relative to one boundary element on a one
object (i.e. there is no global direction such as ``North''). Directions can
be specified as `forward`, `back`, `left` or `right` relative
to the named boundary element, where the named direction refers to a possible
motion of the object.

For directional reasoning purposes, a full set of relationships must be
established between these motion directions, and vertex angles. This is
achieved using functions that apply rules such as ``The segment on the left
side of an acute, convex junction faces backward and to the left with respect
to the segment on the right side''^{5.9}. Other directional relationships include the effects of
reflection, and addition or subtraction of angles. These are all defined by a
set of direction functions.

The directional reasoning part of the system distinguishes between directions
that are precisely known, and directions that are ``vague''. Precisely known
directions are based on right angles, and represent exact angular values.
`Forward`, `left`, `back`, and `right` are all precise
directions. Between these directions are four quadrants (corresponding to
acute and obtuse angles), within which the angle value could be anywhere
within the 90 degree range. The ``vague'' directions describing these
quadrants are ``forward and to the left'' (`fl`), ``back and to the
right'' (`br`), ``forward and to the right'' (`fr`), and ``back and to
the left'' (`bl`). This organisation is obviously a result of the way the
angle quantity space is structured in this implementation, but the distinct
nature of precise directions applies to some values in any quantity space.

It is possible to perform some operations with vague directions - the
reflection of a vague direction is known (it is another vague direction), as
is the value of that direction plus or minus 90 degrees (also a vague
direction). No operation performed on a vague direction can return a precise
direction, however, and this limits the utility of vague directional
information. In addition, an `acute` or `obtuse` angle added to another
vague direction results in no certain direction at all, because the result may
be in either of two quadrants, or it may be a right angle.

The reasoning system includes functions to discriminate between the vague and
precise directions where necessary, so that directional information can be
maintained that is as precise as possible given the input data. Most functions
of the system will continue to operate with vague information for as long as
possible, but will return an ``unknown direction'' token (the unknown
direction is represented by the atom `'?` in lisp) when information
becomes too imprecise. The atom `'?` effectively acts as a ninth
qualitative direction, which is accepted as a legal input by directional
reasoning functions, but usually results in the propagation of unknown
directions throughout the system during geometric reasoning tasks.

The incorporation of ``vague'' and ``unknown'' directions makes the current system robust enough to accept scene data involving imprecise qualitative angle descriptions. This directional reasoning is, however, less powerful than the partial distance ordering, and in most cases it was vague angle information that resulted in the breakdown of geometric reasoning tasks, rather than lack of precision in size information.