Поворот вектора относительно второго

введите сюда описание изображения

private Vector2 GetRotationVector (Vector2 target, Vector2 axis)
{
    var tRad = Atan2(target.y, target.x);
    var aRad = Atan2(axis.y, axis.x);
    var rad = tRad+aRad;
    return new Vector2(Cos(rad), Sin(rad))*target.GetDistance();
}

Можно как-то проще?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Вот так можно довернуть target на угол заданный axis:

private Vector2 GetRotationVector (Vector2 target, Vector2 axis)
{
    axis /= axis.GetDistance(); // Normalize
    return new Vector2(target.x * axis.x - target.y * axis.y, target.x * axis.y + target.y * axis.x);
}
  1. Если вы знаете комплексные числа, то при произведении двух чисел их аргументы складываются, а модули умножаются. Сперва мы получаем число с единичным модулем, затем умножаем на него target. В итоге target повернётся на нужный угол, но не изменит свой модуль.

  2. Если вы не знаете комплексные числа, то смотрите тригонометрические формулы для суммы углов.

→ Ссылка