Как рассчитать среднее направление двух векторов - PullRequest
12 голосов
/ 19 февраля 2009

Я пишу приложение для iPhone на основе opengl и хотел бы позволить пользователю перемещаться вокруг представления в зависимости от направления движения двумя пальцами по экрану. Я знаю, что для одного пальца я мог бы просто вычислить вектор от начальной позиции до текущей позиции пальца пользователя, а затем найти единичный вектор этого, чтобы получить только направление, но я не знаю, как бы это сделать за два пальцы, я не думаю, что сложение компонентов векторов и вычисление среднего значения будет работать, так что я почти застрял.

Ответы [ 8 ]

28 голосов
/ 19 февраля 2009

Векторная математика работает так же, как вы думаете:

v3 = (v1 + v2)/2

// so:
v3.x = (v1.x + v2.x) / 2;
// same for Y and Z
8 голосов
/ 20 февраля 2009

Обычно при графическом программировании лучше умножать, чем делить, поэтому я бы порекомендовал:

v3 = (v1 + v2) * 0.5f;

6 голосов
/ 19 февраля 2009

Если вас интересует только направление, вы должны добавить их и нормализовать вектор результата,

(v1 + v2)/abs(v1 + v2)
5 голосов
/ 19 февраля 2009

Простой мысленный эксперимент: сделайте это для единичных векторов в направлении x и y. Интуитивно понятно, что «среднее» будет единичным вектором под углом 45 градусов вверх и вправо. Именно так и происходит. Мысленный эксперимент предполагает, что вам нужно нормализовать среднее значение по его величине, чтобы получить единичный вектор. Я бы посоветовал вам сделать это.

3 голосов
/ 03 сентября 2013

Извините, но это неправильно. В векторном мире «среднее» в смысле усреднения компонентов ничего не значит. Представьте себе (-1 0) и (1 0) -> среднее = 0 0; -)

3 голосов
/ 19 февраля 2009

сложение их и деление на два действительно работает

2 голосов
/ 09 октября 2014

Чтобы понять это интуитивно, вы можете нарисовать два вектора вниз. Затем нарисуйте отрезок линии между конечными точками двух. Середина этого сегмента - средний вектор. Это работает для любого количества измерений.

1 голос
/ 03 сентября 2013

это не так просто, как может показаться: вам нужно использовать интерполяцию slerp, чтобы найти половину дуги на единичной сфере: http://en.wikipedia.org/wiki/Slerp В глубину здесь: http://www.essentialmath.com/index.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...