Поворот вектора относительно второго
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);
}
Если вы знаете комплексные числа, то при произведении двух чисел их аргументы складываются, а модули умножаются. Сперва мы получаем число с единичным модулем, затем умножаем на него
target. В итогеtargetповернётся на нужный угол, но не изменит свой модуль.Если вы не знаете комплексные числа, то смотрите тригонометрические формулы для суммы углов.
