vec_rotate (VECTOR* vDir, ANGLE* vAng)

Rotates a direction vector by pan, tilt and roll Euler angle.

vec_rotateback (VECTOR* vDir, ANGLE* vAng)

Inverse rotation: rotates a direction vector that was rotated by an Euler angle back to its original orientation ( A7.08 ).

vec_rotateaxis (VECTOR* vDir,VECTOR* vAxis,var angle)

Quaternion rotation: rotates a direction vector by an angle about a given rotation axis ( A7.08 ).

Parameters:

vDir Pointer to a direction vector that is rotated.
vAng Pointer to an Euler angle vector. Only the pan and tilt components are used.
vAxis Pointer to a direction vector that serves as rotation axis.
angle Rotation about vAxis in 0..360 degrees counterclockwise.

Returns:

vDir

Modifies:

vDir

Speed:

Fast

Remarks:

A position can be rotated around a center by subtracting the center vector from the position, rotating the result, and then adding the center vector again.

Example:

var direction[3] = { 10, 0, 0 }; // vector of length 10, pointing straight eastwards in the XYZ coordinate system
var angle[3] = { 90, 45, 0 };    // pan 90 degrees, tilt 45 degrees
...
vec_rotate(direction,angle);  

The direction vector now has the new values 0, 7.07, 7.07. It was rotated by 90 degrees counterclockwise and tilted by 45 degrees upwards, so it now points to the north and halfway upwards.

See also:

Vectors, angles, ang_add, vec_to_angle, vec_for_angle

► latest version online