我正在编写一个基于 opengl 的 iphone 应用程序,并希望允许用户根据他们在屏幕上移动两根手指的方向来围绕视图进行翻译。对于一根手指,我知道我可以只计算从用户手指的起始位置到当前位置的向量,然后找到它的单位向量以获得方向,但我不知道如何为两个手指做到这一点手指,我不认为添加向量的分量并计算平均值会起作用,所以我几乎被卡住了。
Mike Broughton
问问题
48959 次
8 回答
35
向量数学就像你想象的那样工作:
v3 = (v1 + v2)/2
// so:
v3.x = (v1.x + v2.x) / 2;
// same for Y and Z
于 2009-02-19T18:06:52.920 回答
8
通常,在进行图形编程时,出于速度原因,乘法比除法更好,所以我建议这样做:
v3 = (v1 + v2) * 0.5f;
于 2009-02-20T20:44:53.573 回答
7
如果您只对方向感兴趣,您应该添加它们并对结果向量进行归一化,
(v1 + v2)/abs(v1 + v2)
于 2009-02-19T18:14:33.557 回答
5
简单的思想实验:对 x 和 y 方向的单位向量执行此操作。直观地,您可以想象“平均值”将是一个向上和向右 45 度角的单位向量。这正是发生的事情。思想实验表明,您需要按其大小对平均值进行归一化以获得单位向量。我建议你这样做。
于 2009-02-19T18:12:24.307 回答
4
对不起,但这是错误的。在矢量世界中,平均分量意义上的“平均值”没有任何意义。想象一下 (-1 0) 和 (1 0) -> 平均值 = 0 0 ;-)
于 2013-09-03T14:32:21.367 回答
3
将它们相加并除以二确实有效
于 2009-02-19T18:07:06.040 回答
2
它并不像看起来那么容易:您必须使用 slerp-interpolation 来找到单位球体上的半弧: http ://en.wikipedia.org/wiki/Slerp 在此处深入:http://www.essentialmath .com/index.htm
于 2013-09-03T15:08:52.983 回答
2
为了直观地理解它,您可以将两个向量画下来。然后在两者的端点之间画一条线段。该段的中点是平均向量。这适用于任意数量的维度。
于 2014-10-09T19:13:51.847 回答