2010-12-02 21 views
0

2点、abがあります。私はそれらの間の角度を計算する必要があるので、私はそれらをベクトルのように扱います。しかし、ベクターaは常に[0 0 0]と定義されます。 MATLABニュースキャスター、「Angle between two vectors」上に読み出し、三つの溶液が提供される:Matlabの2つのベクトル間の角度

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精度の問題を有している、まだ3つの式のうち、唯一acosが正しい解決策を提供するができます。

acosを引き続き使用するか、より良い解決策がありますか?

+1

は、2点間の角度は何ですか?そして、2つのベクトルのうちの1つが[0 0 0]のとき、ベクトル間の角度はどのくらいですか? – Henrik

+1

2つのベクトルの間の角度が1のときの角度を見つけることは、どういう意味ですか?あなたは[1 1 1]ではないはずですか?また、acosの数式は、ベクトルが単位長である場合にのみ有効です。これは、少なくともaにとっては当てはまりません。 – Xodarap

答えて

-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

vectorは大きさと方向があり、abはスペースの座標点です。 abをベクトルとして扱うときは、暗黙的に[0 0 0]を2つのベクトルの原点として定義します。しかし、点a[0 0 0]にあるので、長さがゼロのベクトルになります。

ベクトルの長さがゼロの場合、どの方向にポイントが入りますか?答えはどこにもありません。これはどの方向にも向いていないため、別のベクトルとの角度を見つけることはできません。

私はたぶんあなたの問題をうまく定義していないと思います。あなたの座標系は[0 0 0]以外の起源ですか? abとx-y平面で形成される線の間の角度を実際に探そうとしていますか?