Я пишу iphone-приложение, основанное на opengl, и хотел бы, чтобы пользователь мог переводить вокруг представления в зависимости от направления движения двух пальцев на экране. Для одного пальца я знаю, что могу просто вычислить вектор от начальной позиции до текущей позиции пальца пользователя, а затем найти единичный вектор этого, чтобы получить только направление, но я не знаю, как бы это сделать для двух пальцы, я не думаю, что добавление компонентов векторов и вычисление среднего будет работать, поэтому я довольно сильно застрял.
Как рассчитать среднее направление двух векторов
Ответ 1
Векторная математика работает так же, как вы думаете:
v3 = (v1 + v2)/2
// so:
v3.x = (v1.x + v2.x) / 2;
// same for Y and Z
Ответ 2
Как правило, лучше умножать, чем делить по причинам скорости при выполнении графического программирования, поэтому я бы рекомендовал следующее:
v3 = (v1 + v2) * 0,5f;
Ответ 3
Простой мысленный эксперимент: сделайте это для единичных векторов в направлениях x и y. Интуитивно вы можете представить, что "средний" будет единичным вектором под углом 45 градусов вверх и вправо. Именно это и происходит. Мыслительный эксперимент предполагает, что вам нужно нормализовать среднее значение по его величине, чтобы получить единичный вектор. Я бы посоветовал вам это сделать.
Ответ 4
Если вас интересует только направление, вы должны добавить их и нормализовать вектор результата,
(v1 + v2)/abs(v1 + v2)
Ответ 5
добавление их и разделение на два делает работу
Ответ 6
Извините, но это неправильно. В векторном мире "среднее" в смысле усредняющих компонентов ничего не значит. Представьте (-1 0) и (1 0) → средний = 0 0; -)
Ответ 7
это не так просто, как могло бы выглядеть: вы должны использовать slerp-интерполяцию, чтобы найти половину дуги на единице сфера: http://en.wikipedia.org/wiki/Slerp В глубине: http://www.essentialmath.com/index.htm
Ответ 8
Чтобы понять это интуитивно, вы можете нарисовать два вектора. Затем нарисуйте сегмент линии между конечными точками двух. Средняя точка этого сегмента - средний вектор. Это работает для любого количества измерений.