轉載 atan2(a,b) 和 atan(a/b)

A_A666發表於2018-10-06

atan2(a,b)是4象限反正切,它的取值不僅取決於正切值a/b,還取決於點 (b, a) 落入哪個象限:
   當點(b, a) 落入第一象限時,atan2(a,b)的範圍是 0 ~ pi/2;
 當點(b, a) 落入第二象限時,atan2(a,b)的範圍是 pi/2 ~ pi;
   當點(b, a) 落入第三象限時,atan2(a,b)的範圍是 -pi~-pi/2;
 當點(b, a) 落入第四象限時,atan2(a,b)的範圍是 -pi/2~0

而 atan(a/b) 僅僅根據正切值為a/b求出對應的角度 (可以看作僅僅是2象限反正切):
   當 a/b > 0 時,atan(a/b)取值範圍是 0 ~ pi/2;
   當 a/b < 0 時,atan(a/b)取值範圍是 -pi/2~0

故 atan2(a,b) = atan(a/b) 僅僅發生在 點 (b, a) 落入第一象限 (b>0, a>0)或 第四象限(b>0, a<0)。當點 (b, a) 落入第二、三象限時,很顯然atan2(a,b) 不等於 atan(a/b) ,並且atan2(a,b)也不可能等於 2*atan(a/b) 。這是因為,假如點 (b, a) 落入第二象限,則 a/b<0,  故atan(a/b)取值範圍始終是 -pi/2~0,2*atan(a/b) 的取值範圍是-pi~0,然而,atan2(a,b)的範圍是 pi/2 ~ pi,故不可能有atan2(a,b) = 2*atan(a/b) 。假如點(b, a) 落入第三象限,則則a/b>0 , 故 atan(a/b) 取值範圍是 0 ~ pi/2,2*atan(a/b) 的取值範圍是 0 ~ pi,而此時atan2(a,b)的範圍是 -pi~-pi/2,很顯然,atan2(a,b) = 2*atan(a/b) 

舉個最簡單的例子,a = 1, b = -1,則 atan(a/b) = atan(-1) = -pi/4, 而 atan2(a,b) = 3*pi/4

--------------------- 本文來自 yjl9122 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/yjl9122/article/details/50995564?utm_source=copy 

對於轉載的文章,我覺得關於(b,a)落在第三象限的結論敘述有些矛盾:

假如點(b, a) 落入第三象限,則則 a/b>0 , 故 atan(a/b) 取值範圍是 0 ~ pi/2,2*atan(a/b) 的取值範圍是 0 ~ pi,而此時atan2(a,b)的範圍是 -pi~-pi/2,很顯然,atan2(a,b) = 2*atan(a/b) 

最後得到atan2(a,b)=2*atan(a/b)的結論應該是不小心打錯的。

atan2(a,b)可以用來計算複平面中點和座標原點連線與實軸的夾角,範圍剛好是(-pi,pi]。需要注意的是atan2(a,b)中a是y軸座標,b是x軸座標。

相關文章