Вращать один вектор лицом к другому, но медленно? - PullRequest
1 голос
/ 21 августа 2011

У меня есть два вектора: heading и target.Как я могу повернуть заголовок к цели?Скажите 10% каждый кадр или что-то.

Сообщество редактировать: Вектор target постоянно меняется.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 21 августа 2011

Найдите угол между двумя векторами, используя произведение точек:

heading . target = |heading|*|target|*cos(theta)

Затем каждый кадр поворачивайте heading на 0.10*theta, используя матрицу вращения.

0 голосов
/ 21 августа 2011

Предполагая, что единственное, что имеет значение, это направление heading и targetHeading, мы будем предполагать, что все векторы нормализованы. Вы также сказали, что хотели бы, чтобы это было правдой:

dheadingDegrees/dt = angle(targetHeading,heading) degrees/sec in the direction of targetHeading

(По крайней мере, так я это интерпретирую, в отличие от "приближается на 10% каждый кадр, но никогда не достигает места назначения")

Чтобы получить точный ответ, вам понадобится интеграция и немного математики. Если вы хотите смоделировать его и получить точный ответ, вы, вероятно, хотите отделить его от «кадров» и смоделировать его, возможно, с 100 интервалами в секунду, в зависимости от требуемой точности.

Таким образом:

every time interval dt:
 target = getCurrentTarget()
 rotationSpeed = angleBetween(target,currentHeading)/(1second)
 heading = {rotate heading by dt*rotationSpeed radians towards target}
            ^-------- for how to do this, see below ----------------^

to rotate a vector v1 to v2 from time t=0 to t=1, with constant angular velocity:
 v1normalized = normalized(v1)
 v2perpNormalized = normalized(v2 - v2*v1normalized)
 animated = cos(t*pi/2)*v1normalized + sin(t*pi/2)*v2perpNormalized
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...