14

C++ と opencv の操作

2 点間の角度を計算しようとしています.....バウンディング ボックスの中心点が変化する 2D 平面があります。フレーム 1 の中心点がフレーム 2 の位置を変更した場合、この2点の角度。

これが私がやろうとしていることの例です:

ここに画像の説明を入力

誰かがこれを解決する方法を提案できますか.......? ある種の数学的解か、おそらく C++ 関数です。

4

2 に答える 2

19

内積を使用:

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
}

以下の画像のように v1 と v2 の間の角度を計算します

ここに画像の説明を入力

于 2013-04-08T20:21:46.540 に答える