2017-05-03 17 views
1

はのは、どのように私はv1 & v2との間の角度を計算するのでしょうか?私が持っている2次元のベクトル2つの3Dベクトルの間のC++計算角度(0〜360)

Vec3 v1, v2; 

v1.x = 203; 
v1.y = 355; 
v1.z = 922; 

v2.x = 6; 
v2.y = 13; 
v2.z = 198; 

を言ってみましょうか私。最終的な答えは、私が

Vec3 angle = v1 - v2; 

そして、いくつか他のものを試してみたが、私はちょうどそれが正しく動作ように見えることはできません

360から0範囲内であろう。

+0

https://math.stackexchange.com/questions/974178/how-to-calculate-the-angle-between-2-vectors-in-3d-space-given-a-preset -function –

+0

@TimBiegeleisen私の質問には答えられていません。 – reflexdev

+0

あなたがする必要があることは、C++の持つ数学関数を理解することだけです。私は 'math.h'ヘッダファイルがあることを思い出しているようです。 –

答えて

1

これにはdot productを使用する必要があります。それが完了したら、standard methodに従うことができます。 例:

#include <cmath> 

float dot(Vec3 a, Vec3 b) //calculates dot product of a and b 
{ 
    return a.x * b.x + a.y * b.y + a.z * b.z; 
} 

float mag(Vec3 a) //calculates magnitude of a 
{ 
    return std::sqrt(a.x * a.x + a.y * a.y + a.z * a.z); 
} 

int main() 
{ 
    Vec3 v1, v2; 

    v1.x = 203; 
    v1.y = 355; 
    v1.z = 922; 

    v2.x = 6; 
    v2.y = 13; 
    v2.z = 198; 

    float angle = std::acos(dot(v1,v2)/(mag(v1)*mag(v2))); 
} 
+0

0度と180度の間の角度を返すようです... – mireazma

+0

@mireazma何が起こると思いますか? – nitronoid

+0

私はあなたの質問を理解していません。あなたの解を読んだ後、私はそれが0度と180度の間の角度を返すことを期待しています。しかし、それを読む前に私はあなたの答えが0と360の間の角度を返すと期待していました。正しい期待は何ですか? – mireazma

関連する問題