atan2

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

atan2Arkustangens-Variante mit zwei Parametern

Beschreibung

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

Diese Funktion berechnet den Arkustangens von y/x. Im Gegensatz zu atan() kann sie dabei die Vorzeichen beider Parameter beachten und so den Quadranten des Ergebnisses bestimmen.

Die Funktion gibt das Ergebnis im Bogenmaß zurück, das zwischen -PI und PI (inklusive) liegt.

Parameter-Liste

y

Der Dividend (Zähler).

x

Der Divisor (Nenner).

Rückgabewerte

Der Arkustangens von y/x im Bogenmaß.

Siehe auch

add a note

User Contributed Notes 4 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 THISN 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 °*/?>
up
3
mirellastitan at gmail dot com
8 years ago
The russian translation for this article contains a translation error.Делитель and Делимое should be visa versa:Делимое is the dividendДелитель is the divisorThank you in advance for fixing this issue. It's quite confusing
up
1
Monte Shaffer
18 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 placesfunction 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);    }
To Top