Synopsis
PDX_MSGT gdx_GetAxisAngleFromMatrix(long option, GDX_MATRIX matrix, MTH_3DVEC axis, double *angle, MTH_3DPNT point)
Purpose
Conversion Matrix to Axis Angle
Description
A 3x3 matrix has 9 numbers therefore it contains replicated information, so there are many ways to derive the rotation from the numbers, here is a possible conversion:
angle = acos(( m00 + m11 + m22 - 1)/2) x = (m21 - m12)/sqrt((m21 - m12)2+(m02 - m20)2+(m10 - m01)2) y = (m02 - m20)/sqrt((m21 - m12)2+(m02 - m20)2+(m10 - m01)2) z = (m10 - m01)/sqrt((m21 - m12)2+(m02 - m20)2+(m10 - m01)2)
There are two singularities at angle = 0 and angle = 180, these cases the above formula may not work so we have to test for these cases separately. At 0 the axis is arbitrary (any axis will produce the same result), at 180 the axis is still relevant so we have to calculate it.
Input
option
Options (not used)
matrix
GDX matrix to convert
Output
axis
Calculated axis
angle
Calculated angle
point
Translation point
Return
GDX_NOERR or error