2009-02-19 77 views
10

我正在編寫基於opengl的iphone應用程序,並希望允許用戶根據他們在屏幕上移動兩個手指的方向來翻譯視圖。對於一根手指,我知道我可以從開始位置到用戶手指的當前位置計算矢量,然後找到這個單位矢量以獲得正確的方向,但我不知道如何爲兩個手指,我不認爲增加矢量的組成部分和計算平均值會起作用,所以我幾乎卡住了。如何計算兩個矢量的平均方向

回答

24

矢量數學工作就像你認爲:

v3 = (v1 + v2)/2 

// so: 
v3.x = (v1.x + v2.x)/2; 
// same for Y and Z 
3

加入他們再除以2不工作

5

簡單的思維實驗:那麼,在X和Y方向的單位向量。直觀地說,你可以看到「平均」將是一個向上和向右45度角的單位向量。這正是發生的情況。思想實驗表明,你需要將平均值的大小標準化以得到一個單位向量。我建議你這樣做。

5

如果你只在方向有興趣,你應該將它們添加和規範的結果向量,

(v1 + v2)/abs(v1 + v2) 
+8

除零! – 2009-02-20 20:58:35

+0

let v1!= v2 ... – RickyA 2013-03-12 13:27:09

+0

如果只對方向感興趣,則v1和v2必須先歸一化。 – pikaille 2017-08-03 19:02:56

7

通常最好是做圖形編程,所以我會推薦這時候乘不是分裂的速度的原因:

v3 =(v1 + v2)* 0.5f;

3

對不起,但這是錯誤的。在矢量世界中,平均分量意義上的「平均」意味着什麼。想象一下(-1 0)和(1 0) - >平均= 0 0 ;-)

1

要直觀地理解它,可以繪製兩個向量。然後在兩者的端點之間繪製一條線段。這部分的中點是平均向量。這適用於任何數量的維度。