gpujs / gpu.js

GPU Accelerated JavaScript
https://gpu.rocks
MIT License
15.1k stars 652 forks source link

Fix atan2 implementation to behave like Javascript Math.atan2 #683

Open ted-piotrowski opened 3 years ago

ted-piotrowski commented 3 years ago

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.

ted-piotrowski commented 1 year ago

@robertleeplummerjr I noticed you've been active on this project again. What are your thoughts on merging this fix?

sojs-coder commented 9 months ago

@robertleeplummerjr @ted-piotrowski any update on merging this fix? this issue I believe relies on it.