I'm having an extremely difficult time getting heading calculations correctly.
This is quite simple once you realize that headings first need to be normalized to +/- 180 degrees (as opposed to 0-360). Shortest turn is then the normalized difference between the new and current heading. Direction to turn is left for a negative difference and right otherwise.
Example:
Current heading: 270 (normalized to -90)
New heading: 100 (normalized to 100)
Turn = 100 – (-90) = 190 (normalized to -170)
Shortest turn to reach 100 from 270 is then to turn 170 degrees left.
To convert from 0-360 to +/-180 can be done as follows:
While (heading > 180) heading -= 360
While (heading < - 180) heading += 360