1. 程式人生 > >atan與atan2在求角度時的差別

atan與atan2在求角度時的差別

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

相關推薦

atanatan2角度差別

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

atan()atan2()

一段 來看 3.1 pri 傾斜 con tchar 有用 ble Atan2 函數介紹 atan2原型:extern float atan2(float y, float x);用法:#include <math.h>功能:求y/x(弧度表示)的反正切值說明:

C語言中兩個反正切函式atanatan2的區別

我們可以使用正切操作將角度轉變為斜率,那麼怎樣利用斜率來轉換為角度呢?可以利用斜率的反正切函式將他轉換為相應的角度.as中有兩個函式可以計算反正切,我們來看一下. 1、as中Math.atan() Math.atan()接受一個引數:用法如下: angel=Math.atan(slope)  angel為一

【C/C++】C語言math.h庫函式中atanatan2的區別

Ref 在 math.h 標準庫中,定義了兩個反正切函式: //返回以弧度表示的 x 的反正切 double atan(double x) //返回以弧度表示的 y/x 的反正切。y 和 x 的值的符號決定了正確的象限。 double at

C#中Atan()Atan2()

簡言之: Atan2(y,x)代表的含義與Atan(y/x)含義相同。 實際上,Atan2()是Atan()的升級版。它更加穩定。 atan(y/x),當 y 遠遠大於 x 時,計算結果是不穩定的。 atan2(y,x)的做法:當 x 的絕對值比 y 的絕對值大時使用

c++ 中反正切的函式atanatan2差別

atan2 返回給定的 X 及 Y 座標值的反正切值。反正切的角度值等於 X 軸與通過原點和給定座標點 (Y座標, X座標) 的直線之間的夾角。結果以弧度表示並介於 -pi 到 pi 之間(不包括 -pi)。 atan2(a, b) 與 atan(a/b)稍有不同,atan2(a,b)的取值範圍介於

atan函式atan2函式的一點區別

 atan 和 atan2 都是求反正切函式,如:有兩個點 point(x1,y1), 和 point(x2,y2); 那麼這兩個點形成的斜率的角度計算方法分別是: float angle = atan( (y2-y1)/(x2-x1) ); 或 float angle =

Shell中BASHKSH使用管道差別

注:此文涉及實際專案原始碼截圖,檢視時可不關注處理邏輯!          根據測試與實際的使用過程中發現:BASH中管道內都為子程序,而KSH中最後一個管道為父程序其他為子程序!(簡單的測試過程放在最後)。因此KSH與BASH轉換時,在使用管道的地方,有以下幾種情況時,需要

VS2015基礎 VS新建專案 名稱解決方案名稱的差別

       慈心積善融學習,技術願為有情學。善心速造多好事,前人栽樹後乘涼。我今於此寫經驗,願見文者得啟發。新建專案,開啟新建專案所在的資料夾,你會發現 解決方案名稱是最高階資料夾的名字開啟 以 解決

MatalbC混編矩陣無法傳到編譯好的mex文件

read www .html matalb tps 1-1 https mex文件 sca %E8%AF%B7%E9%97%AE%E6%88%91%E5%86%99%E7%9A%84%E8%BF%99%E4%B8%AA%E8%87%AA%E5%8A%A8%E7%94%9F%

DLP上網行為管理的差別總結

會有 指紋 路徑 控制 ftp 後綴 用戶訪問 軟件 名稱 參考網康和深信服的上網行為管理手冊,總結了一下DLP與上網行為管理的差別: DLP與上網行為管理在功能和使用目的上有很大不同。主要體現在: 上網行為管理主要是對用戶訪問目標URL過濾,應用端口限制,上網時段

/etc/profile/etc/bashrc、交互式非交互式、loginnon-login shell的差別

cached 運行 mit -m 相同 結果 cron 作文 ssh 線上的memcached又掛了。仍然沒有得到core文件。排查原因,同事發現啟動memcached的腳本存在可疑問題。 問題一:沒有設置memcached工作文件夾,有可能core dump時沒

[javase學習筆記]-8.2 成員變量靜態變量的差別

key [] cte 執行 div 學習 article alt art 這一節我們看一看成員變量與靜態變量的差別所在。 什麽是靜態變量呢?我們上節用statickeyword時就提到了靜態變量。也就是說用statickeyword修飾的變量就是靜態變量。

抽象逐步

設計 抽象層 類定義 並且 aik 不用 專註 實體 階段 https://baike.baidu.com/item/抽象/9021815 抽象(Abstraction)是簡化復雜的現實問題的途徑,它可以為具體問題找到最恰當的類定義,並且可以在最恰當的繼承級別解釋問題。它可

產品經理項目經理的差別體會

項目經理 產品經理 產品經理——靠想。產品經理是做正確的事,其所領導的產品是否符合市場的需求,是否能給公司帶來利潤的。項目經理——靠做。項目經理是把事情做正確,把事情作得完美,在時間,成本和資源約束的條件下完成目標。產品生命周期和項目生命周期產 品生命周期關註的是整個產品從規劃到制造,再到最終維護和消

comparator接口Comparable接口的差別

new lis blog dcs 大小 top ng- 功能 邏輯 1. Comparator 和 Comparable 同樣的地方 他們都是java的一個接口, 而且是用來對自己定義的class比較大小的, 什麽

struts2spring集成,關於class屬性及成員bean自動註入的問題

private r.js clas -i sets 成員 struts b- inpu   正常來說按照Spring官方配置,在struts2與spring整合時,struts配置文件中class屬性指向spring配置的bean id,但是在class指向類路徑時,

閉包(closure)協程共用要註意的事情

閉包函數 rac 外部 它的 有意 ret 漸進 true strong 閉包是一種能夠讓你用非常舒服的方式來編程的小技巧,Go也支持閉包。假設從來沒有接觸過閉包,

VS2013DEV控件DataTable調試無法共存解決辦法

cmd pro bsp source 刪除 目錄 security 鏈接地址 file 1. 關閉所有vs 程序,包括vs2005 vs2012 vs2013等 2.修改dev代碼,重新編譯DLL,步驟如下: 用defines.bat 替換 C:\Program Fil

<<敏捷軟件開發:原則、模式實踐>>,素數產生程序,第一個java

ner ring 部分 跳過 spa urn 輸出 int stat import java.util.Arrays;public class GeneratePrimes { public static void main(String[] args) { // TOD