# how do you rotate a vector

Discussion in 'Scripting' started by dansav, Apr 20, 2010.

1. ### dansav

Joined:
Sep 22, 2005
Posts:
407
Is there some unity3d function that will rotate a vector and return a new vector.

Like vector (5,0,0) rotated 0,180,90 degrees would return
vector (0,5,0)?

Thanks,

Dan

2. ### tomvds

Joined:
Oct 10, 2008
Posts:
1,028
You can multiply the vector with the rotation:

Code (csharp):
1. rotatedVector = Quaternion.Euler(0,180,90) * originalVector;
Note: there is only one allowed order of multiplication. (I believe I got it right as rotation * vector, but I did not test the example).

3. ### dansav

Joined:
Sep 22, 2005
Posts:
407
That worked.

Is there some documentation on quaternions and what you can do with them in terms of vector or quaternion math?

For example can you multiply quaternions, what is the result?
A quaternion multiplied by a vector3 what is the result?

etc..

Thanks.

Dan

4. ### tomvds

Joined:
Oct 10, 2008
Posts:
1,028
The Quaternion reference page does discuss the two possible multiplications:
http://unity3d.com/support/documentation/ScriptReference/Quaternion-operator_multiply.html

It does, however, do it in the usual brief 'Unity reference style', which may not help you much if you don't already know what a quaternion is .

5. ### ivkoni

Joined:
Jan 26, 2009
Posts:
978
in which case there's always wikipedia
http://en.wikipedia.org/wiki/Quaternion

it's a quaternion (representing a composite rotation of the 2 quaternion: rotate by the first quaternion and then by the second. Note multiplication is not commutative, just like the order in which you apply the rotations matters)
it is a vector (rotated by the quaternion)

6. ### Cor1312

Joined:
Apr 12, 2010
Posts:
34
I need help regarding rotating a vector using a quaternion.

Code (csharp):
1. transform.position = position;
2. transform.rotation = target.rotation;
3. transform.Translate(0.75f, 0.80f, 2.10f);
Code (csharp):
1. position += new Vector3(0.75f, 0.80f, 2.10f);
2. transform.position = position;
I would expect both codes to output similarly but it's not happening. Am I using the quaternion to rotate the vector wrongly?