0

私はポイントのセットを扱っています.私の目標は、4つのベクトルを一緒に追加し、開始点と終了点の間の結果を計算することです.

上記の部分を実行するためのコードを既に準備しているので、正常に動作しているように見えますが、それについては確信が持てません。

とにかく、私がこの質問を投稿している本当の理由は、結果の方向と角度に関係しています。

結果の角度と方向を見つけるという概念と、プログラミングの賢明さを理解するのは難しいと思います。

このシナリオを考えてみましょう....画像

ここに画像の説明を入力

最初にベクトルを追加「頭 2 尾」

ベクトルの加算について私が学んだことから、x2 - x1、y2 -y1 を減算することで、これにより位置ずれの差が潜り込み、AE からのすべてのポイントに対して同じ計算が行われます。

結果を取得するには、すべてのポイント x を 2 の累乗に平方根し、すべての y 位置を 2 の累乗に加算します。

このイデオロギーはうまく機能しているようです.....

しかし、ここでの質問は、その合力の角度と方向をどのように取得するかです....?

結果を計算するために使用するコード:

 double Pta; 
    double Ptb;
    Point  vect;
    float R1, R2;
    float resultant;

    for(vector<Point>::iterator iter_a = Left_Arm_xy.begin()+1; iter_a != Left_Arm_xy.end(); ++iter_a)
    {

        if(center.y <= 240)
        {
            vect.x = iter_a->x - (iter_a -1)->x;
            vect.y = iter_a->y - (iter_a -1)->y;

            vect_add.push_back(Point(vect.x,vect.y));


                for(vector<Point>::iterator iter_v = vect_add.begin(); iter_v - vect_add.begin() + 4 < vect_add.size(); iter_v+=4)
                {

                        R1 = iter_v->x + (iter_v +1)->x + (iter_v +2)->x + (iter_v +3)->x;
                        R2 = iter_v->y + (iter_v +1)->y + (iter_v +2)->y + (iter_v +3)->y;

                        resultant = sqrt(pow(R1,2) + pow(R2,2));

                }   

        }

このことを考慮..............

では、ポイント A[2,4]、B[4,8]、C[10,12] を考えてみましょう。このベクトルを追加するには、ベクトル/ポイントを追加します。ポイント B x4 - A x2 とポイント B y8 - A y4 を減算します。ポイント C x10 - B x4 およびポイント C y12 - B y8 これにより、ポイント間の変位が得られます....結果を取得するために、すべてのポイント X と Y の x 2+4+10 = 16 y 4+ を追加します8+12 = 24、次は平方根 16 ^2 + 24^2 = 28.84 です。結果が数値ではなく、x と y の値であるこれらの計算に基づいて、どのように方向と角度を取得できますか?

4

2 に答える 2

2

ベクトルの単純な和です。

(x, y) = (x1, y1) + (x2, y2) + ... = (x1+x2+..., y1+y2+...)

最終的なベクトルがある場合、その角度は次を使用して見つかります

tan(angle) = y/x
于 2013-04-12T00:50:44.997 に答える
1

2 つのベクトル間の角度は、一般に次のように定義されます。

Angle = arccos( DotProduct(v1, v2) / ( Length(v1) * Length(v2) ) );

方向は、単純に 2 つのベクトルの減算です。

Direction = v2 - v1;

通常、これを正規化して単位ベクトルを取得する必要があります。

Len = SquareRoot( direction.x * direction.x + direction.y * direction.y );
Direction.x /= Len;
Direction.y /= Len;

したがって、単位方向ベクトルとベクトルの角度が得られます。

于 2013-04-12T00:56:23.623 に答える