Понимание математики вращения в этом фрагменте кода - PullRequest
0 голосов
/ 11 февраля 2020

Вот мой код, указывающий c на вращение, заданный псевдокодом.

var rad = (targettransform.rotationEuler.y) * Math.PI / 180;


var difVec = targettransform.pos - othertransform.pos;

//the difVec.z which means radius
this._targetPos.z -= difVec.z * (1 - Math.cos(rad));
this._targetPos.x += difVec.z * Math.sin(rad);

this.transform.position = this._targetPos;
this.transform.lookAt(targettransform.position, Utils.UnitY);

Приведенный выше псевдокод - не более чем вращение, но я не понимаю, что 1 - Math.cos(rad) делает, это может быть некоторый вывод относительно тригонометрии c. Может ли кто-нибудь объяснить эту математику подробно.

Редактировать

Извините, моя ошибка, основная цель фрагмента кода состоит в том, чтобы сместить "_targetpos" на vec3(difVec.z * Math.sin(rad),0,this._targetPos.z) в плоскости xz. Мне удается переписать псевдокод, чтобы иметь смысл. Кажется, что фрагменты кода реализуют только функцию сохранения относительного расстояния и просмотра цели.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

1 - cos (Θ) = 2 sin² (Θ / 2) и sin (Θ) = 2 sin (Θ / 2) cos (Θ / 2), так что вы умножаете скаляр δ на 2 sin (Θ / 2) и вектором в направлении -Θ / 2, добавляемом к целевой позиции.

0 голосов
/ 11 февраля 2020

Мы можем видеть такие термины (1-Cos(Fi)) и (Sin(Fi)) в формуле вращения вокруг произвольной оси на Родригес

Но вопрос не дает достаточно подробностей, чтобы убедиться, что этот код действительно делает .

...