>>Just varying either the x or y axis gives hugely different heading results (including at 'steep' angles Nan)
>>
>
>
>
> // Calculate compass heading
> var compassHeading = Math.atan(Vx / Vy);
>
>
>Have you tried replacing the Math.atan()) by the Math.atan2() ?
No, but I will. My trig's too rusty to guess what the effect might be :-}
>
http://www.w3schools.com/jsref/jsref_atan2.asp