One thing at a time. Let's look at the vectors first. Each vector arrow will consist of two elements - a line and an arrowhead. The length of the line should be related to the magnitude of the vector, and it should be rotated to match the angle implied by the two cartesian components (U and V). The lines should probably be scaled so that the longest one stretches completely across it's 'cell' in the vector field, without reaching into adjoining cells. The arrowhead is a little trickier. You need to work out the dimensions for the basic triangular shape you'll want, with it pointing, for instance, stright up. The shape will be defined by the locations of the three corners, relative to the center of the arrowhead. Then modify your arrowhead code so it'll take an angle as a parameter, and will render the arrowhead rotated to that angle. (Hint- if you define the arrowhead by it's corners, you should be able to apply the rotation to the corners and then draw the triangle. That should get you started, anyway. :)