PDA

View Full Version : Rotation of a point about vectors


Bucky
Oct30-06, 08:41 PM
I have two points in 3d space, cameraPosition and billboardPosition. In addition to this i have their normals.

I want billboardPosition to be rotated so that its normal points at cameraPosition.

basically...I'm stuck.

I've found the equation of the vector that passes through both points using equation (18) on http://mathworld.wolfram.com/Line.html (its the correct one to use yeah?).

So how do i go about finding the angle between billboardNormal and the line i found? also is this the easiest way to go about matters or is there a faster/easier method?

0rthodontist
Oct30-06, 10:07 PM
For conciseness you have c and b (cameraPosition and billboardPosition). You also have n, the normal to the billboard. The vector from b to c is c - b. You can find the angle between c - b and n by using the dot product (this is how an angle can be defined in 3 dimensions):
x \cdot y = |x| |y| cos \theta where theta is the angle between x and y so
cos^{-1} (\frac{x \cdot y}{|x| |y|}) = \theta
So you can rotate the normal by the angle cos^{-1} (\frac{(c - b) \cdot n}{|c - b| |n|})
The dot there is the dot product, and the || signs mean the length of the vectors, calculated by (x^2 + y^2 + z^2)^(0.5) if the vector is (x, y, z).

I don't know that rotation is exactly what you want though. Do you want other stuff to move with this vector when you rotate it? In that case you should express the rotation as a linear transformation with b at the origin.

Bucky
Nov1-06, 06:41 AM
ok i had written out a long step by step of what im doing but i've realised my problem is much simpler than what i thought it was.

i think my problem is im only rotateing it about the y axis (its "fixed" to only change in the x-z plane) but its calculations take into account the y-position of the camera...not good.

is there another method i can use to only use the x and z coordinates for the camera and billboard?

0rthodontist
Nov1-06, 09:43 AM
You have not made clear just what it is that your program needs to do.