我正在编写一个基于opengl的iphone应用程序,并希望允许用户根据他们在屏幕上移动两根手指的方向来转换视图。对于一根手指,我知道我可以计算从用户手指的起始位置到当前位置的向量,然后找到单位向量以获得方向,但我不知道我将如何为两个做这个手指,我不认为添加向量的组成部分并计算平均值会有效,所以我几乎被卡住了。
答案 0 :(得分:27)
矢量数学就像你想象的那样:
v3 = (v1 + v2)/2
// so:
v3.x = (v1.x + v2.x) / 2;
// same for Y and Z
答案 1 :(得分:8)
在进行图形编程时,通常最好乘以速度除以速度原因,所以我建议这样做:
v3 =(v1 + v2)* 0.5f;
答案 2 :(得分:6)
如果你只对方向感兴趣,你应该添加它们并规范化结果向量,
(v1 + v2)/abs(v1 + v2)
答案 3 :(得分:5)
简单思考实验:对x和y方向的单位向量进行处理。直观地,您可以想象“平均”将是向上和向右45度角的单位向量。这正是发生的事情。思想实验表明,您需要将平均值按其大小标准化以获得单位向量。我建议你这样做。
答案 4 :(得分:3)
添加它们并除以2可以正常工作
答案 5 :(得分:3)
抱歉,这是错误的。在矢量世界中,平均分量意义上的“均值”意味着什么。想象(-1 0)和(1 0) - >平均值= 0 0; - )
答案 6 :(得分:2)
要直观地理解它,你可以向下绘制两个向量。然后在两者的端点之间绘制一条线段。该段的中点是平均向量。这适用于任何数量的维度。
答案 7 :(得分:1)
它并不像它看起来那么容易:你必须使用slerp-interpolation来找到单位球上的半弧:http://en.wikipedia.org/wiki/Slerp 深入探讨:http://www.essentialmath.com/index.htm