PHP 7.4.0RC4 Released!

atan2

(PHP 4, PHP 5, PHP 7)

atan2Arc tangent of two variables

Açıklama

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).

Değiştirgeler

y

Dividend parameter

x

Divisor parameter

Dönen Değerler

The arc tangent of y/x in radians.

Ayrıca Bakınız

12
reubs at idsdatanet dot com
16 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. :)
fred dot beck at rrd dot com
10 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

}
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 °

*/

?>
mirellastitan at gmail dot com
2 years ago
The russian translation for this article contains a translation error.

Делитель and Делимое should be visa versa:

Делимое is the dividend
Делитель is the divisor

Thank you in advance for fixing this issue. It's quite confusing
Monte Shaffer
12 years ago
Here is a function that will return a new point [Rotate around non-origin pivot point]

(x,y) is current point
(cx,cy) is pivot point to rotate
=a= is angle in degrees

\$_rotation     = 1;      # -1 = counter, 1 = clockwise
\$_precision    = 2;      # two decimal places

function returnRotatedPoint(\$x,\$y,\$cx,\$cy,\$a)
{
# http://mathforum.org/library/drmath/view/63184.html
global \$_rotation;     # -1 = counter, 1 = clockwise
global \$_precision;    # two decimal places

// radius using distance formula
\$r = sqrt(pow((\$x-\$cx),2)+pow((\$y-\$cy),2));
// initial angle in relation to center
\$iA = \$_rotation * rad2deg(atan2((\$y-\$cy),(\$x-\$cx)));

\$nx = number_format(\$r * cos(deg2rad(\$_rotation * \$a + \$iA)),\$_precision);
\$ny = number_format(\$r * sin(deg2rad(\$_rotation * \$a + \$iA)),\$_precision);

return array("x"=>\$cx+\$nx,"y"=>\$cy+\$ny);
}
-1
andyidol at gmail dot com
9 years ago
This function will return degree by vertex coordinates in general trigonometrical coordinate system where zero is located at position (1, 0), 90' at (0, 1), 180' at (-1, 0) and so on.

<?php

function GetDegree(\$x, \$y)
{

// we don't want to cause division by zero

if(\$x == 0) \$x = 1 / 10000;

\$deg = rad2deg(atan(abs(\$y / \$x)));

if(
\$y >= 0) \$deg = \$x < 0 ? 180 - \$deg : \$deg;
else
\$deg = \$x < 0 ? 180 + \$deg : 360 - \$deg;

return
\$deg;

}

?> 