\ 4tH library - FATAN2 ZEN - Copyright 2009 J.L. Bezemer \ You can redistribute this file and/or modify it under \ the terms of the GNU General Public License \ include lib/zenfloat.4th [UNDEFINED] fatan2 [IF] [UNDEFINED] fatan [IF] include lib/zenfasin.4th [THEN] \ x == 0 and y == 0 invalid operation \ x == 0 and y < 0 -(pi/2) \ x == 0 and y > 0 pi/2 \ x > 0 arctan (y/x) \ x < 0 and y < 0 arctan (y/x) - pi \ otherwise arctan (y/x) + pi : fatan2 ( sin[y] cos[x] -- rad) 2dup f0= if \ if x equals 0 2drop 2dup f0= abort" Invalid operation" f0< >r 314159265 -8 2 s>f f/ r> if fnegate then else \ if x doesn't equal zero 2over 2over f/ fatan \ calculate arctan(y/x) 2swap f0< if 314159265 -8 2rot f0< if fnegate then f+ else 2swap 2drop then then \ adjust accordingly ; [THEN] \ -2 s>f 0 s>f fatan2 f. cr \ 2 s>f 0 s>f fatan2 f. cr \ 2 s>f 2 s>f fatan2 f. cr \ -2 s>f -2 s>f fatan2 f. cr \ 0 s>f 2 s>f fatan2 f. cr \ 0 s> -2 s>f fatan2 f. cr \ 2 s>f -2 s>f fatan2 f. cr \ 0 s>f 0 s>f fatan2 f. cr