# Formula request [3D Vector Rotation]

#### D4RK_G4ND4LF

Level 19
I'd like to have a formula which gives me the coordinates of the point C in this picture:

As you can see point B is rotated by angle alpha (can you say "rotated by vector A"?) around the origin so that it represents point C.
In other words the angle from A is subtracted from B to create C.
The function will be called very often so it mustn't contain cos/sin/tan/acos/asin/atan/sqrt and so on.
I've done this for 2D already but I need it for 3D. Anyway here is the 2D formula so it is easier for you to help me.

a, b and c are the length of the line from 0/0 to A, B and C
A, B and a are given

1.
Ax = a*cos(alpha) <=> Ax/a = cos(alpha)
Ay = a*sin(alpha) <=> Ay/a = sin(alpha)

2.
Bx = b*cos(beta) <=> Bx/b = cos(beta)
By = b*sin(beta) <=> By/b = sin(beta)

3.
Cx = b*cos(beta - alpha)
Cy = b*sin(beta - alpha)

4.
cos(beta - alpha) = cos(alpha)*cos(beta) + sin(alpha)*sin(beta)
sin(beta - alpha) = sin(alpha)*cos(beta) - cos(alpha)*sin(beta)

5.
4. into 3.:
Cx = b*(cos(alpha)*cos(beta) + sin(alpha)*sin(beta))
Cy = b*(sin(alpha)*cos(beta) - cos(alpha)*sin(beta))

6.
1. into 5.:
Cx = b*(Ax/a*cos(beta) + Ay/a*sin(beta))
Cy = b*(Ay/a*cos(beta) - Ax/a*sin(beta))

7.
2. into 6.:
Cx = b*(Ax/a*Bx/b + Ay/a*By/b)
Cy = b*(Ay/a*Bx/b - Ax/a*By/b)

8.
removing b:
Cx = Ax/a*Bx + Ay/a*By
Cy = Ay/a*Bx - Ax/a*By

Of course B/a can be extracted to make it faster.

Thanks if you read the text above until here and thanks in advance if you try to help me and another thanks if you make it work.

edit:
just noticed that I have to define towards which axis the angle will be subtracted
it should be the z-axis
http://www.hiveworkshop.com/forums/...l-code-snippets-40758/index9.html#post1917333

#### Attachments

• rotation.png
4.6 KB · Views: 987
Last edited:

Replies
15
Views
2K
Replies
6
Views
577
Replies
7
Views
612
Replies
1
Views
202
Replies
10
Views
309