如何计算两个向量的平均方向

Mik*_*ton 12 iphone math vector

我正在编写一个基于opengl的iphone应用程序,并希望允许用户根据他们在屏幕上移动两根手指的方向来转换视图.对于一根手指,我知道我可以计算从用户手指的起始位置到当前位置的向量,然后找到这个单位向量以获得方向,但我不知道如何为两个做这个手指,我不认为添加向量的组成部分和计算平均值将起作用所以我几乎卡住了.

Ale*_*yne 29

矢量数学就像你想的那样工作:

v3 = (v1 + v2)/2

// so:
v3.x = (v1.x + v2.x) / 2;
// same for Y and Z
Run Code Online (Sandbox Code Playgroud)


pet*_*ket 8

通常情况下,在进行图形编程时,为了速度原因,乘以除数比较好,所以我建议这样做:

v3 =(v1 + v2)*0.5f;

  • 这样的东西不会被编译器优化,所以`/ 2.0`与`*0.5`相同吗? (9认同)

Sin*_*ion 7

如果你只对方向感兴趣,你应该添加它们并规范化结果向量,

(v1 + v2)/abs(v1 + v2)
Run Code Online (Sandbox Code Playgroud)

  • 被零除! (10认同)

duf*_*ymo 5

简单思考实验:对x和y方向的单位向量进行处理.直观地,您可以想象"平均"将是向上和向右45度角的单位向量.这正是发生的事情.思想实验表明,您需要将平均值按其大小标准化以获得单位向量.我建议你这样做.


Fer*_*gel 5

抱歉,但这是错误的。在矢量世界中,平均分量意义上的“平均值”毫无意义。想象一下 (-1 0) 和 (1 0) -> 平均值 = 0 0 ;-)