.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R

.fi
..
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.hy 0
.if n .na
.bd B 3
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.IX Title "atan2 Cg"
.TH atan2 Cg "" "Cg Toolkit 1.5" "Cg Standard Library"
.UC
.SH "NAME"
\&\fBatan2\fR \- returns arctangent of scalars and vectors.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 5
\&  float  atan2( float  y, float  x );
\&  float1 atan2( float1 y, float1 x );
\&  float2 atan2( float2 y, float2 x );
\&  float3 atan2( float3 y, float3 x );
\&  float4 atan2( float4 y, float4 x );
.Ve
.Vb 5
\&  half   atan2( half  y, half x );
\&  half1  atan2( half1 y, half x );
\&  half2  atan2( half2 y, half x );
\&  half3  atan2( half3 y, half x );
\&  half4  atan2( half4 y, half x );
.Ve
.Vb 5
\&  fixed  atan2( fixed  y, fixed x );
\&  fixed1 atan2( fixed1 y, fixed x );
\&  fixed2 atan2( fixed2 y, fixed x );
\&  fixed3 atan2( fixed3 y, fixed x );
\&  fixed4 atan2( fixed4 y, fixed x );
.Ve
.SH "PARAMETERS"
.IX Header "PARAMETERS"
.Ip "y" 8
.IX Item "y"
Vector or scalar for numerator of ratio of which to determine the arctangent.
.Ip "x" 8
.IX Item "x"
Vector or scalar of denominator of ratio of which to determine the arctangent.
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBatan2\fR calculates the arctangent of y/x.  \fBatan2\fR is well defined for every point other than the origin, even if x equals 0 and y does not equal 0.
.PP
For vectors, the returned vector contains the arctangent of each
element of the input vector.
.SH "REFERENCE IMPLEMENTATION"
.IX Header "REFERENCE IMPLEMENTATION"
\&\fBatan2\fR for a \fBfloat2\fR scalar could be implemented as an approximation like this.
.PP
.Vb 3
\&  float2 atan2(float2 y, float2 x)
\&  {
\&    float2 t0, t1, t2, t3, t4;
.Ve
.Vb 6
\&    t3 = abs(x);
\&    t1 = abs(y);
\&    t0 = max(t3, t1);
\&    t1 = min(t3, t1);
\&    t3 = float(1) / t0;
\&    t3 = t1 * t3;
.Ve
.Vb 8
\&    t4 = t3 * t3;
\&    t0 =         - float(0.013480470);
\&    t0 = t0 * t4 + float(0.057477314);
\&    t0 = t0 * t4 - float(0.121239071);
\&    t0 = t0 * t4 + float(0.195635925);
\&    t0 = t0 * t4 - float(0.332994597);
\&    t0 = t0 * t4 + float(0.999995630);
\&    t3 = t0 * t3;
.Ve
.Vb 3
\&    t3 = (abs(y) > abs(x)) ? float(1.570796327) - t3 : t3;
\&    t3 = (x < 0) ?  float(3.141592654) - t3 : t3;
\&    t3 = (y < 0) ? -t3 : t3;
.Ve
.Vb 2
\&    return t3;
\&  }
.Ve
.SH "PROFILE SUPPORT"
.IX Header "PROFILE SUPPORT"
\&\fBatan2\fR is supported in all profiles except fp20.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
the abs manpage,
the acos manpage,
the asin manpage,
the atan manpage,
the sqrt manpage,
the tan manpage
