2024年PHP开发者大会日本站

atan2

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

atan2两个变量的反正切

描述

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

此函数计算两个变量xy的反正切。它类似于计算y / x的反正切,不同之处在于它使用两个参数的符号来确定结果的象限。

该函数以弧度返回结果,结果介于 -PI 和 PI 之间(包括)。

参数

y

被除数参数

x

除数参数

返回值

y/x的反正切,以弧度表示。

参见

添加注释

用户贡献的注释 6条注释

reubs at idsdatanet dot com
21年前
只是一个注释

PHP的atan2函数接收(y,x)格式的参数,而Excel接收(x,y)格式的参数。如果您正在移植公式,请注意这一点。 :)
fred dot beck at rrd dot com
15年前
<?php
/**
* 给定原点 (0,0) 和目标点 $x,$y(位于坐标轴网格上)
* compass() 函数确定目标点相对于原点的罗盘方位(方向)
*
* 但是,atan2(y,x) 的自然罗盘方向认为东方为北方,
*
* {135}-------{ 90}-------{45}
* | +-----[ +y]-----+ |
* | | | |
* | | | |
* {180} [-x] [0,0] [+x] {0} <--------- 北方?
* | | | |
* | | | |
* | +-----[ -y]-----+ |
* {-135}-------{-90}-------{-45}
*
*
* 因此,我们将 atan2(y,x) 的参数简单地转置为 atan2(x,y)
* 这将同时旋转(左旋)和反射(镜像)罗盘。
*
* 这给了我们这个罗盘
*
* {-45}-------{ 0 }-------{45}
* | +-----[ +y]-----+ |
* | | | |
* | | | |
* {-90} [-x] [0,0] [+x] {90}
* | | | |
* | | | |
* | +-----[ -y]-----+ |
* {-135}-------{180}-------{135}
*
* 最后,我们检查参数 $x 是否确实为负数,
* 如果是,我们将 360 加到 atan2() 返回的负角度上
*
*/
function compass($x,$y)
{
if(
$x==0 AND $y==0){ return 0; } // ...或者返回 360
return ($x < 0)
?
rad2deg(atan2($x,$y))+360 // 参数转置!! y,x
: 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);

/* 渲染结果如下:

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
7年前
这篇文章的俄语翻译存在错误。

Делитель 和 Делимое 应该互换

Делимое 是被除数
Делитель 是除数

提前感谢您修复此问题。这非常令人困惑
Monte Shaffer
17年前
这是一个返回新点[绕非原点枢轴点旋转]的函数

(x,y) 是当前点
(cx,cy) 是旋转的枢轴点
=a= 是角度(度)

$_rotation = 1; # -1 = 逆时针,1 = 顺时针
$_precision = 2; # 小数点后两位

function returnRotatedPoint($x,$y,$cx,$cy,$a)
{
# http://mathforum.org/library/drmath/view/63184.html
global $_rotation; # -1 = 逆时针,1 = 顺时针
global $_precision; # 小数点后两位


// 使用距离公式计算半径
$r = sqrt(pow(($x-$cx),2)+pow(($y-$cy),2));
// 相对于中心的初始角度
$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);
}
biziclop at example dot com
7小时前
<?php
// 如果 $radians 介于 -PI … +PI 之间,则
atan2( sin( $radians ), cos( $radians )) ≈ $radians
?>
andyidol at gmail dot com
14年前
此函数将根据一般三角坐标系中的顶点坐标返回角度,其中零位于 (1, 0) 位置,90° 位于 (0, 1),180° 位于 (-1, 0) 等等。

<?php

function GetDegree($x, $y)
{
// 我们不想导致零除错误
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;

}

?>
To Top