2010-12-02 888 views
0

我有兩點,分別是ab。我需要計算它們之間的角度,所以我把它們當作矢量來對待。但矢量a將始終定義爲[0 0 0]。閱讀在MATLAB新聞閱讀器,「Angle between two vectors」,提供了三種解決方案:Matlab中兩個向量之間的角度

x1 = 0; 
y1 = 0; 
z1 = 0; 
x2 = 0; 
y2 = 1; 
z2 = 0; 
a = [x1,y1,z1]; b= [x2,y2,z2]; 

theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b))) 
theta = rad2deg(acos(dot(a,b))) 
theta = rad2deg(atan2(x1*y2-x2*y1,x1*x2+y1*y2)) 

然而,隨着acos具有測量精度問題THETA接近零,但出了三個方程中,只有acos提供正確的解決方案。

我應該繼續使用acos還是有更好的解決方案?

+1

什麼是兩點之間的角度?當兩個矢量之一是[0 0 0]時,兩個矢量之間的角度是多少? – Henrik 2010-12-02 15:51:32

回答

-1

錯誤在於設置a = [0 0 0]。興趣點以原點爲中心,並計算相對於矢量b的角度,您需要指定點在行進的方向。這可以通過設置a來完成,是一個單位向量。

如果點在「x」方向行駛,然後x1=1

x1 = 1; 
y1 = 0; 
z1 = 0; 
x2 = 0; 
y2 = 1; 
z2 = 0; 
a = [x1,y1,z1]; b= [x2,y2,z2]; 

theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b))) 
theta = rad2deg(acos(dot(a,b))) 
theta = rad2deg(atan2(x1*y2-x2*y1,x1*x2+y1*y2)) 

theta = 
    90 
theta = 
    90 
theta = 
    90 

問題解決了,忘記使用單位向量:P

4

A vector有幅度和方向,而ab只是空間座標點。當您將ab作爲向量對待時,您隱式將[0 0 0]定義爲兩個向量的原點。然而,由於點a[0 0 0],那麼它將是一個零長度的向量。

如果矢量長度爲零,它指向哪個方向?答案是無處。它並不指向任何方向,因此您無法找到它與另一個矢量之間的角度。

我想也許你已經定義你的問題很差。您的座標系是否具有[0 0 0]以外的原點?你是否真的試圖找到由ab組成的線與x-y平面之間的夾角?