Maybe i do not understand translating algorithm. How many iterations do translating algorithm for bullet, which will hit after 30 turns (according to my tests it's avarage bullet flight time for Tomcat)?
I do not remeber exactly, but interpolating algorithm do about 4-7 iterations. And if translating algorithm does 30 iterations, i'm sure, that interpolating is faster:)
And indeed, both of algorithm needs for more clear description:)
Also, which open source bot is implement translating PIF? May be code will be more clear for me
The reason translating version is faster because in each iteration it doesn't have to do any trig, just simple addition. Trig only involve in battlefield rotation (at the beginning and at the end). This is the reason this version is faster.
Glacier does the interpolation while recording scans, instead of during PIF, but same effect really.
Edit: Err... I got mixed up by the page title being "interpolating PIF" which I'd strongly expect to refer to interpolating missed scans. But yes, Glacier does use translating PIF.
Hmm, it looks like both methods can be used together to implement hyper fast PIF:)
But i'm pretty sure, that methods have comparable performance, because count of iterations and possibility to quick discard paths, which going out of battle field
And any way, PIF is not that thing, which eats significant part of CPU time:) In my case, at least:)
Actually, the combination of both methods has already been done. In Glacier I did combine "interpolating PIF" and "translating PIF" once upon a time. The result was, it was seeming to be a little faster (barely faster really, because translating PIF is fast because each iteration takes so little computation, and the extra computation of interpolating really hurts that). I discarded the combination in the end though, because the code complexity was not worth the slight performance difference.
Just to note, I think "interpolating PIF" is a terribly confusing name, since "interpolation" and "PIF" in the same conversation has normally referred to missed scan handling.
How you measure a performance?
You're welcome to rename this page, i can not find out better name:)
I had both methods running at the same time in the same bot, and put "System.nanoTime()" calls around each method. I then summed up the time taken in each and found the average time used by each method during a battle.