This gives a signed angle for any angles:
a = targetA - sourceA a = (a + 180) % 360 - 180 Beware in many languages the modulo operation returns a value with the same sign as the dividend (like C, C++, C#, JavaScript, full list here). This requires a custom mod function like so:
mod = (a, n) -> a - floor(a/n) * n Or so:
mod = (a, n) -> (a % n + n) % n If angles are within [-180, 180] this also works:
a = targetA - sourceA a += (a>180) ? -360 : (a<-180) ? 360 : 0 In a more verbose way:
a = targetA - sourceA a -= 360 if a > 180 a += 360 if a < -180