PHP 8.5.0 Released!

atan2

(PHP 4, PHP 5, PHP 7, PHP 8)

atan2Arc tangent of two variables

Description

atan2(float $y, float $x): float

This function calculates the arc tangent of the two variables x and y. It is similar to calculating the arc tangent of y / x, except that the signs of both arguments are used to determine the quadrant of the result.

The function returns the result in radians, which is between -PI and PI (inclusive).

Parameters

y

Dividend parameter

x

Divisor parameter

Return Values

The arc tangent of y/x in radians.

See Also

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 2 notes

up
15
reubs at idsdatanet dot com
22 years ago
Just a note:
PHP's atan2 function receives parameters in (y,x) and Excel receives it in (x,y) format. Just in case you are porting formulas across. :)
up
11
fred dot beck at rrd dot com
16 years ago
<?php
/**
 * Given an origin point of (0,0) and a destination point $x,$y
 * somewhere on an axis grid, compass() determines the compass
 * heading(direction) of the destination point from the origin
 * 
 * HOWEVER, atan2(y,x)'s natural compass thinks east is north, 
 * 
 * {135}-------{ 90}-------{45}
 * | +-----[ +y]-----+ | 
 * | | | | 
 * | | | | 
 * {180} [-x] [0,0] [+x] {0} <--------- North ?
 * | | | | 
 * | | | | 
 * | +-----[ -y]-----+ | 
 * {-135}-------{-90}-------{-45}
 *
 *
 * SO, we simply transpose the (y,x) parameters to atan2(x,y) 
 * which will both rotate(left) and reflect(mirror) the compass. 
 *
 * Which gives us this compass
 * 
 * {-45}-------{ 0 }-------{45}
 * | +-----[ +y]-----+ | 
 * | | | | 
 * | | | | 
 * {-90} [-x] [0,0] [+x] {90}
 * | | | | 
 * | | | | 
 * | +-----[ -y]-----+ | 
 * {-135}-------{180}-------{135}
 *
 * FINALLY,` we check if param $x was indeed a negative number, 
 * if so we simply add 360 to the negative angle returned by atan2() 
 * 
 */
function compass($x,$y)
 {
 if($x==0 AND $y==0){ return 0; } // ...or return 360
 return ($x < 0)
 ? rad2deg(atan2($x,$y))+360 // TRANSPOSED !! y,x params
 : rad2deg(atan2($x,$y)); 
 }
function polar($x,$y)
 {
 $N = ($y>0)?'N':'';
 $S = ($y<0)?'S':'';
 $E = ($x>0)?'E':'';
 $W = ($x<0)?'W':''; 
 return $N.$S.$E.$W;
 }
function show_compass($x,$y)
 {
 return '<BR>'
 .polar($x,$y)
 .' compass( x='.$x.', y='.$y.' )= '
 .number_format(compass($x,$y),3).'&deg';
 }
echo show_compass(0,3);
echo show_compass(.06,3);
echo show_compass(3,3);
echo show_compass(3,.06);
echo show_compass(3,0);
echo show_compass(3,-.06);
echo show_compass(3,-3);
echo show_compass(.06,-3);
echo show_compass(0,-3);
echo show_compass(-.06,-3);
echo show_compass(-3,-3);
echo show_compass(-3,-.06);
echo show_compass(-3,0);
echo show_compass(-3,.06);
echo show_compass(-3,3);
echo show_compass(-.06,3);
/* RENDERS THIS
N compass( x=0, y=3 )= 0 °
NE compass( x=0.06, y=3 )= 1.14576283818 °
NE compass( x=3, y=3 )= 45 °
NE compass( x=3, y=0.06 )= 88.8542371618 °
E compass( x=3, y=0 )= 90 °
SE compass( x=3, y=-0.06 )= 91.1457628382 °
SE compass( x=3, y=-3 )= 135 °
SE compass( x=0.06, y=-3 )= 178.854237162 °
S compass( x=0, y=-3 )= 180 °
SW compass( x=-0.06, y=-3 )= 181.145762838 °
SW compass( x=-3, y=-3 )= 225 °
SW compass( x=-3, y=-0.06 )= 268.854237162 °
W compass( x=-3, y=0 )= 270 °
NW compass( x=-3, y=0.06 )= 271.145762838 °
NW compass( x=-3, y=3 )= 315 °
NW compass( x=-0.06, y=3 )= 358.854237162 °
*/
?>
+add a note

AltStyle によって変換されたページ (->オリジナル) /