My recommendation is for these targeting methods to be part of a set of targeting options, used only if they are shown to be the most likely to hit a particular opponent.
Linear Mean - extrapolating a change in position linearly
Take a present scan position and an older scan position (with a known difference in time). Ignore actual heading and velocity. Find the angle from from the old scan to the new one. This is the mean heading. Find the distance between the two points, and divide by time. This is the mean velocity. Using the mean heading and velocity, you can extrapolate the enemy's position for any point in time.
Circular Mean - extrapolating a change in heading and velocity linearly
Take a present scan position and all scan headings and velocities back a certain amount of time. Ignore previous positions. Find the sum of all headings and divide by the number of scans. This is your mean heading change. Find the sum of all velocities and divide by the number of scans. This is your mean velocity. Using the mean heading change and velocity, you can extrapolate the enemy's position for any point in time.
Your mileage may vary. These targeting methods are intended against opponents who make frequent heading and/or speed changes to throw off simpler prediction algorithms. As an extra step you may try multiple sample sizes to average from, or even devise a means for calibrating the sample size on the fly.
The effectiveness of these methods will vary greatly. If your opponent moves in well-defined patterns, you'll have great success with these results (unless the pattern is long or complicated). If your opponent is moving randomly or reacting to shots fired, your results will be poor. I'm using this method in one of my bots as the starting method, until my PatternMatching gun records enough and kicks in.