We now describe a strategy for selecting the shot that is most likely to succeed. Starting from the cue-ball, we compute linear trajectories to all solid balls (or striped balls if the user selects to play as stripes). We then compute linear trajectories from these to the detected pockets. Then we test each of these possible trajectories: from cue-ball to solid-ball to pocket to find those that don't involve any collisions with other objects. If no solid balls are found, we test the 8-ball for possible trajectories.
We then weight each of the 'valid' trajectories by the following
heuristics. Each time the user is to take a shot, we are really
interested in the angle at which he or she hits the cue ball (we shall
assume that the force with which the cue ball is hit is going to be
determined by the user). So, what is fundamentally being suggested to
the user is an angle at which to hit a cue ball, say as a
deviation from the line connecting the cue ball to the solid ball. The
more accuracy we need on
, the harder the
shot. Figure
shows how we can determine the
required angle. The distance from the cue-ball to the solid-ball is
l and the distance from there to the pocket is L. The angle formed
by the three objects is
at the solid ball. We can compute
using this information as well as a bound on the maximum
error on
which is
.
Figure: Determining the Angle and the Difficulty
For each possible shot, we compute and display to the user
the shot with the greatest value of
(the shot which
requires the least accuracy) with the required trajectory (along
) superimposed on the image. This is a simplified
first-order strategy model since it is only 2D and does not include
spin effects, kinematics or rebounds in the computation of the shots.