Best way to set desired range with inverse trig functions?

20 Views Asked by At

I am currently performing some inverse trigonometric operations. The actual formula I am using is at the bottom of this post, but is not super important. Minimally, I am taking an arctangent atan2(x,y) result in [-π,π). However, for reasons, I need the "equivalent" result on [0,2π), i.e. where maps to π and -π/2 maps to 3π/2, etc. I can achieve this by taking the sign of the result, and if it is negative adding :

function fix_range(angle float) float :=
    if angle < 0:
        angle += 2π
    return angle

...but I'd prefer to have a "math" solution to this. Is there a convenient mathematical formulation to adjust periodic ranges into a desired range? For example, is there a formula (without any logical control structures) so that:

function adjust_val(val float, min_range float, period float) := ?

So that adjust_val(-π/2, 0, 2π) gives 3π/2?

Common "math" operations allowed, for example anything available to numpy or other math libraries in other languages.

Appendix:

Here's the formula I'm combatting with:

atan2(sin(lat_1)*sin(lon_1)*cos(lat_2)*cos(lon_2) - sin(lat_2)*sin(lon_1)*cos(lat_1) + sin(lon_2)*cos(lat_2)*cos(lon_1), sin(lat_1)*cos(lat_2)*cos(lon_1)*cos(lon_2) - sin(lat_2)*cos(lat_1)*cos(lon_1) - sin(lon_1)*sin(lon_2)*cos(lat_2)) - pi
0

There are 0 best solutions below