演算法 C 計算向量的角度

2021-09-08 18:18:48 字數 1224 閱讀 9726

c 語言裡 double atan2(double y,double x) 返回的是原點至點(x,y)的方位角,即與 x 軸的夾角。也可以理解為複數 x+yi 的輻角。返回值的單位為弧度,取值範圍為

excel 裡 atan2(x,y)返回的是原點至點(x,y)的方位角。返回值的單位為弧度,取值範圍為

注意:

1、c 函式與 excel 函式的引數順序正好相反;

2、c 函式允許 x、y 同時為零,excel 不允許 x、y 同時為零。

atan2 比 atan 穩定。

如:atan(y/x),當 y 遠遠大於 x 時,計算結果是不穩定的。

atan2(y,x)的做法:當 x 的絕對值比 y 的絕對值大時使用 atan(y/x);反之使用 atan(x/y)。這樣就保證了數值穩定性。

atan2(y,x)是表示x-y平面上所對應的(x,y)座標的角度,它的值域範圍是(-pi,pi)

用數學表示就是:atan2(y,x)=arg(y/x)-pi

當y<0時,其值為負,

當y>0時,其值為正.

例子:

#include

#include

int main(void)

在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

例2:斜率是-1的直線的角度

cout

例如求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<

平面向量及空間向量間角度的計算

如果根據斜率什麼的判斷可能會涉及到對斜率計算結果精確度的判斷,這就很麻煩,所以並不推薦用斜率計算 更推薦的是使用向量的關係 假設向量a a1,a2 向量b b1,b2 平行 共線 a1 b1 a2 b2 這裡就不需要擔心計算斜率帶來的精度的問題了 相交 則計算角度 實現 如下文貼出的空間向量計算的實...

關於角度的計算

transform.tranformdirection vector3 dir 將角度從區域性座標轉換到全域性座標.dir被視為區域性座標的方向 例如 someobject.transform.transfordirection vector3.right 返回的是someobject的右方 乙個方...

計算向量面積 三向量的混合積

建議閱讀原文 預備知識向量的叉乘 我們定義以下運算 為向量 的混合積 混合積滿足 這個公式可由圖 1 記憶 圖 1 式 2 記憶法 圖中箭頭的方向由叉乘的方向 順時針或逆時針 決定,與內積無關,即 如果混合積的順序取與箭頭相反的方向,根據叉乘的性質,需要在前面加上負號 叉乘不滿足乘法交換律 式 2 ...