2013-04-08 4 views
9

との間の角度を計算.....私は今、バウンディングボックスの変更中心点と2次元平面を持っていますフレーム1の中心点がフレーム2の位置を変更したので、これらの2点の角度を求める必要があります。ここで場合、私は2点間の角度を計算しようとしていますC++とOpenCVの</p> <p>での作業ポイント

は私がやろうとしています何の例です:

enter image description here

誰かがこれをワークアウトの方法を提案することができます.......?いくつかの種類の数学的解または恐らくC++関数。

+8

以下のようにV1とV2との間の角度を算出しますポイント、ちょうどライン。角度を定義するには2行が必要です。他の行はどこですか? –

+0

ええと、角度はどこですか?つまり、あなたの角度がどこにあるかによって、atan2()関数も便利かもしれませんが、明確な答えを得るために質問/図を改善する必要があります。 –

+4

実際には、画像に角度を描くことができれば便利です。 –

答えて

15

使用Dot product

v1.v2 = v1.x * v2.x + v1.y * v2.y 

v1.v2 = |v1| * |v2| * cos(theta) 
---------------------------------+ 
           | 
           +--> theta = acos(v1.v2/|v1|*|v2|) 

サンプルコードである:

float angleBetween(const Point &v1, const Point &v2) 
{ 
    float len1 = sqrt(v1.x * v1.x + v1.y * v1.y); 
    float len2 = sqrt(v2.x * v2.x + v2.y * v2.y); 

    float dot = v1.x * v2.x + v1.y * v2.y; 

    float a = dot/(len1 * len2); 

    if (a >= 1.0) 
     return 0.0; 
    else if (a <= -1.0) 
     return PI; 
    else 
     return acos(a); // 0..PI 
} 

これは、2つの間に角度がありません画像

enter image description here

+0

ここに返される角度を定義してもよろしいですか?そして私はそれが@トマジによって要求されたものと一致するかどうかを見ることができます –

+1

@David彼は今行ったので、私はコメントを削除しています:画像は言葉以上ここに:) – Sjoerd

+0

私はドットプロダクトhttp: /www.youtube.com/watch?v=WDdR5s0C4cY,~~~そしてなぜ&bが3つのパラメータを持っているのか疑問に思っています.....あなたのケースでは、vはポイントデータタイプの変数でしょうか? – Tomazi

関連する問題