В GLSL (в частности, 3,00, который я использую) есть две версии
atan(): atan(y_over_x) может возвращать только углы между -PI/2, PI/2, в то время как atan(y/x) может принимать во внимание все 4 квадранта, поэтому диапазон углов охватывает все: -PI, PI, что очень похоже на atan2() в С++.
Я хотел бы использовать второй atan для преобразования координат XY в угол.
Однако atan() в GLSL, к тому же неспособный обрабатывать, когда x = 0, не очень стабилен. Особенно там, где x близок к нулю, деление может переполняться, что приводит к противоположному результирующему углу (вы получаете что-то близкое к -PI/2, где вы предполагаете получить приблизительно PI/2).
Какая хорошая, простая реализация, которую мы можем построить поверх GLSL atan(y,x), чтобы сделать ее более надежной?


