在c語言的math.h或c++中的cmath中有兩個求反正切的函式atan(double x)與atan2(double y,double x) 他們返回的值是弧度 要轉化為角度再自己處理下。
前者接受的是乙個正切值(直線的斜率)得到夾角,但是由於正切的規律性本可以有兩個角度的但它卻只返回乙個,因為atan的值域是從-90~90 也就是它只處理一四象限,所以一般不用它。
第二個atan2(double y,double x) 其中y代表已知點的y座標 程式設計客棧同理x ,返回值是此點與遠點連線與x軸正方向的夾角,這樣它就可以處理四個象限的任意情況了,它的值域相應的也就是-180~180了
例如:例1:斜率是1的直線的夾角程式設計客棧
cout<
cout<
cout<
後兩個斜率都是1 但是atan只能求出乙個45
例2:斜率是-1的直線的角度
cout<
cout《程式設計客棧四象限
cout<
常用的不是求過原點的直線的夾角 往往是求乙個線段的夾角 這對於atan2就更是如魚得水了
例如求a(1.0,1.0) b(3.0,3.0)這個線段ab與x軸正方向的夾角
用atan2表示為 atan2(y2-y1,x2-x1) 即 atan2(3.0-1.0,3.0-1.0)
它的原理就相當於把a點平移到原點b點相應變成b'(x2-x1,y2-y1)點 這樣就又回到先前了
例三:a(0.0,5.0) b(5.0,10.0)
線段ab的夾角為
cout<
atan2與atan的區別
對於tan y x 當點 x,y 在象限的邊界也就是座標軸上時 atan接受的是乙個正切值 直線的斜率 得到夾角,但是由於正切的規律性本可以有兩個角度的但它卻只返回乙個,因為atan的值域是從 90 90 也就是它只處理一四象限,所以一般不用它。atan2 double y,double x 其中y...
ATan2與ATan的區別
相比較atan,atan2究竟有什麼不同?本篇介紹一下atan2的用法及使用條件。對於tan y x atan y x 求出的 取值範圍是 pi 2,pi 2 atan2 y,x 求出的 取值範圍是 pi,pi 當 x,y 在第一象限,0 pi 2.當 x,y 在第二象限 pi 2 pi.當 x,y...
atan和atan2反正切計算
typedef struct point point 給定兩個點 point a x1,y1 b x2,y2 使用反三角函式atan求斜率,原型如下 float atan float arg double atan double arg long double atan long double ar...