2013-04-12 80 views
0

我與設定點的工作,我的目標是增加4個向量在一起,計算起點和終點之間的結果,矢量合成角度和方向

既然我已經準備好了代碼做上述部分這似乎工作正常,但我不確定。

無論如何,我發佈這個問題的真正原因是與結果的方向和角度。

我發現很難理解找到合成角度和方向以及編程明智的概念。

考慮這種情況....圖片

enter image description here

1ST ADD載體 「頭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值我怎麼能得到的方向和角度....?

+1

題外話。基本的數學問題。查看點積的屬性。然後召喚反諷。 –

回答

2

這是一個簡單的矢量求和。

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

當你有最終的載體,它的角是通過使用

tan(angle) = y/x 
+2

爲了增加這一點,大多數編程語言將有一個數學庫函數atan2(),它需要兩個變量y和x。這允許它返回角度的右側象限。 – Patashu

+0

好吧,讓我們考慮點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值我怎麼能得到的方向和角度....?對不起,很長的評論:P – Tomazi

+0

點不是矢量。 (x,y)通過它在x和y上的投影長度來定義向量。你只需要兩個數字來定義一個2D矢量。如果你使用兩點A(start)和B(end)來定義它,那麼你的矢量是(xB-xA,yB-yA)。然後按照我的描述添加它們。 – sashkello

1

發現兩個向量之間的角度一般被定義爲:

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

方向是簡單的減法兩個向量:

Direction = v2 - v1; 

通常情況下,你必須正常化這得到單位向量:

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

這樣,你就會有一個單位方向矢量和矢量的角度。