В 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)
, чтобы сделать ее более надежной?