#include "axisangle.h"
#include "mathtypes.h"
#include "quat.h"
#include "matrix4x4.h"


void AxisAngle::ToQuaternion( Quaternion &q ) const
{
	real ca = (real)cos(angle*0.5f);
	real sa = (real)sin(angle*0.5f);
	q.x = sa * x;
	q.y = sa * y;
	q.z = sa * z;
	q.w = ca;
}

void AxisAngle::ToMatrix( Matrix4x4 &m ) const
{
	real sa=(real)sin(angle);
	real ca=(real)cos(angle);
	real t = 1.0f - ca;

	real sx = sa * x;
	real sy = sa * y;
	real sz = sa * z;
	real tx = t * x;
	real ty = t * y;
	real tz = t * z;

	m._11 = (tx * x) + ca;
	m._21 = (tx * y) + sz;
	m._31 = (tx * z) - sy;

	m._12 = (tx * y) - sz;
	m._22 = (ty * y) + ca;
	m._32 = (ty * z) + sx;

	m._13 = (tx * z) - sy;
	m._23 = (ty * z) + sx;
	m._33 = (tz * z) + ca;
}