##### Когда мы умножаем Quaternion на вектор мы поворачиваем вектор туда, куда смотрит Quaternion?
Да, когда мы умножаем [Quaternion](Кватернион.md) на вектор, мы поворачиваем вектор в том направлении, куда смотрит Quaternion.
[Кватернион](Кватернион.md) представляет собой способ представления поворота в трехмерном пространстве. Он содержит информацию о том, как повернуть одну систему координат относительно другой. При умножении Quaternion на вектор, мы применяем этот поворот к вектору.
В Unity, когда мы работаем с компонентами Transform, мы используем Quaternion для представления поворота объекта. Например, чтобы повернуть объект на 90 градусов вокруг оси Y, мы можем использовать следующий код:
```csharp
transform.rotation *= Quaternion.Euler(0.0f, 90.0f, 0.0f);
```
Этот код повернет объект на 90 градусов вокруг оси Y, изменяя значение transform.rotation. Затем, когда мы умножаем transform.rotation на вектор, мы поворачиваем этот вектор в направлении, куда смотрит новое значение transform.rotation.
Вот пример кода, который поворачивает вектор Vector3.forward на 90 градусов вокруг оси Y:
```csharp
Quaternion rotation = Quaternion.Euler(0.0f, 90.0f, 0.0f);
Vector3 rotatedVector = rotation * Vector3.forward;
```
В этом примере мы создаем новый Quaternion, который поворачивает объект на 90 градусов вокруг оси Y, используя функцию Quaternion.Euler(). Затем мы умножаем Quaternion на вектор Vector3.forward, чтобы повернуть его в направлении, куда смотрит новый Quaternion.
##### Покажи мне пример с числами, когда мы вектор поворачиваем с помощью кватерниона.
Давайте представим, что у вас есть вектор `v = (1, 0, 0)`. Это ваш дочерний объект относительно родителя в локальных координатах.
Теперь предположим, что мы хотим повернуть этот вектор вокруг оси Y на 90 градусов. Вращение вокруг оси Y на 90 градусов в Unity можно представить как кватернион `q = Quaternion.Euler(0, 90, 0)`.
Теперь, чтобы применить это вращение к вектору, мы просто умножим кватернион на вектор:
```csharp
Vector3 vRotated = q * v;
```
После выполнения этой операции, `vRotated` будет равен `(0, 0, -1)`.
Что мы здесь видим, это то, что вращение на 90 градусов вокруг оси Y перемещает вектор из позиции `(1, 0, 0)` в позицию `(0, 0, -1)`. Это ожидаемое поведение, поскольку вращение вокруг оси Y поворачивает объекты вдоль оси X вдоль оси Z.
Пожалуйста, обратите внимание, что углы в функции `Quaternion.Euler` задаются в градусах, а не в радианах, и вращение производится в порядке Z, X, Y.
Примечание от меня: Про вращение написано в заметке «Rotation/Quaternion (Вопросы к GPT)».