Fix atan2 implementation to behave like Javascript Math.atan2
- Previous implementation returned values in -PI/2 to PI/2 range even though Javascript returns in -PI to PI range
- Add unit tests covering edge cases
Fixes #647
Previously the following cases failed:
Math.atan2(1, 0);
Math.atan2(-1,0);
Math.atan(0,-1);
According to MDN Math.atan2(y, x) returns a value between -PI and PI. According to OpenGL atan(y / x) returns a value between -PI/2 and PI/2 while atan(y, x) returns a value between -PI and PI.
The main fix was to change the atan signature to take (y, x) instead of (y / x) and then to handle the cases Math.atan2(-1, 0), Math.atan2(1, 0), Math.atan(0, 0) because in OpenGL atan is undefined when x = 0 but defined in Javascript.
Note: atan arguments are passed y first and then x. This caused me some confusion at first.
@robertleeplummerjr I noticed you've been active on this project again. What are your thoughts on merging this fix?
@robertleeplummerjr @ted-piotrowski any update on merging this fix? this issue I believe relies on it.