In order to get NDSolve to shut off once we escape the viewing window, we insert an If statement into the equation. This adds to our understanding of the system of differential equations, for the gray regions give meaning to the various direction changes in the orbits. The traditional way to view a phase space uses arrows based on a grid of points. But for many examples this does not give a good feeling for the flow. Either the vectors are all drawn to the same length, in which case one does not have any idea of the magnitude of the flow, or the vectors are drawn to scale, in which case the vectors disappear near the equilibrium points and the flow is not at all apparent.
Fish have circular heads with a tail tapering back to a point opposite the direction of the flow.
It is easy to color the fish to reflect different properties of the vectors such as length or direction. Another benefit is that the curvature of the vector field can be represented by curvy fish giving more of an illusion of motion. To get curvy fish we first tried just taking several steps along the vector field as in Euler's method for numerically solving a differential equation. However, the step size must be chosen based on the first step taken for each vector in order to keep the computations manageable and thus it is very difficult to control the overall size of the fish. With Mathematica it is very easy to take a step using the 3-term Taylor series method which gives curvature information in the first step.